SessionRestore goes out of its way to calculate |initially_hidden|, but this can be incorrect. Specifically in the case of the active tab in a minimized window. Maybe just initializing all windows as HIDDEN and letting the window manager take care of this would work?
SessionRestore::RestoreTab calls ShowBrowser after a tab restore, and this takes care of performing all of the appropriate view calculations which causes the visibility to be correctly updated very quickly. However, in the case of a minimized window it doesn't call WasHidden, as the window was always hidden (it was created that way). So the WebContents stays incorrectly initialized with a "visible" state.