Is the frmMain the Startup object or is frmSplash? It sounds like after a few seconds, the frmSplash is hiding itself, but not Closing... The frmMain then Opens and is eventually Closed by the User, but the process is actually being controlled by frmSplash.
This is a bit of guesswork on my part, because I don't quite know how your code is working, but this is what it sounds like to me.
I would change it up by having the frmMain be your Starup Object and then you can put your code to show the frmSplach within frmMain's Load() event.
Does this make sense?