Le soucis, si je me trompe pas, c'est que tu appelles la form2 depuis la form1, or le Me.Close() libère les ressources utilisées par la form1, qui contient donc l'appel de la seconde.
Tu peux le remarquer en mettant un Thread.Sleep(5000) avant d’appeler Close()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
Thread.Sleep(5000)
Me.Close()
End Sub
Tu verras que ton programme tourne durant les 5 secondes.
Y'a un moyen pas très propre dans les propriétés du projet 
http://puu.sh/4D4pl.png
Tout en bas, change le champ pour le mettre comme sur le screen.
Second moyen plus propre 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim form As New Form2
form.Show()
Me.Dispose()
End Sub
