Thanks for your replies.
I have tried hooking up the Map.Progress event handler in Page.Load, Map.Load and also in Map.Layers.LayersInitialized events, but without success. By stepping through the code, I can see that the Page.Load event is reached and the Map.Load event is reached, but Map.Layers.LayersInitialized and Map.Progress events never fire (at least while the ASP.NET splashscreen is still visible).
If I first turn off the ASP.NET splashscreen div using the javascript Invoke method in the Page.Load or Map.Load event handlers, then the Map.Layers.LayersInitialized and Map.Progress events start to fire.
I'm leaning toward putting up a separate Silverlight modal splashscreen to replace the ASP.NET splashscreen div when it is closed on Page.Load. Then the Silverlight splashscreen would block out the page until the Map.Progress event reaches 100. Not as elegant as I hoped, though, and I still don't understand what I'm doing wrong...
BTW, I'm using Silverlight ESRI API 2.2.