An old post that I've just hit - it appears there is an MS bug that rears its head, almost randomly it seems, though some machines seem to be worse affected than others.
Thanks to Mr Gallagher for pointing me at the MSDN social article with the work-around.
The trick is to help the Framework realise when the splash screen is actually available by not letting it hide the splash until it's been properly created.
So add a SplashLoadFinished flag as a user setting or similar.
Then set this flag in the Splash Form.Load event (the lines below must be the first and last lines respectively):
Private Sub Form_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    My.Settings.SplashLoadFinished = False
    ...
    My.Settings.SplashLoadFinished = True
End Sub
Then put a wait loop in the ApplicationEvents Startup event :
Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
...
If (Me.SplashScreen IsNot Nothing) Then
    'Wait until the Splash has actually been created
    While (Not My.Settings.SplashLoadFinished)
        System.Threading.Thread.Sleep(50)
    End While
End If
...