I don't think anybody has ever come up with a satisfactory solution to the
bug where the webbrowser control, hosted in an MDI child, breaks when the
form is hidden and reshown. I think this problem also sometimes manifests
itself in non-MDI forms too.

The solution I came up with was very simple and seems to work perfectly.
State is maintained perfectly and you don't have to reload the page or
anything.
1) Wrap the webbrowser control in your own UserControl (I recommend the
WebOCHostVB... search for it in MS KB... Article ID 311303).
2) In the usercontrol's HandleDestroyed event remove the webbrowser from the
Controls collection (and add it back in the HandleCreated event). This
prevents the orphaning of the webbrowser window.

Private Sub WebOCHostCtrl_HandleDestroyed(ByVal sender As Object, ByVal
e As System.EventArgs) Handles MyBase.HandleDestroyed

'detach the browser
If Not webBrowser Is Nothing Then
If Me.Controls.Contains(webBrowser) Then
Me.Controls.Remove(webBrowser)
End If
End If

End Sub

Private Sub WebOCHostCtrl_HandleCreated(ByVal sender As Object, ByVal e
As System.EventArgs) Handles MyBase.HandleCreated

'attach the browser
If Not webBrowser Is Nothing Then
If Not Me.Controls.Contains(webBrowser) Then
Me.Controls.Add(webBrowser)
webBrowser.Width = Me.ClientRectangle.Width
webBrowser.Height = Me.ClientRectangle.Height
End If
End If

End Sub

That's it!