The problem is that Server.Transfer doesn't preserve the form's data unless you specify you want it to (add an extra boolean parameter). However doing this causes an infinite loop...
Bit of a dirty hack but this works for me and should get you onto the right track.
Protected Sub ChangeTheme_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlThemes.SelectedIndexChanged
If Session("test") Is Nothing Then
Session("Test") = True
Session.Add("MyTheme", ddlThemes.SelectedItem.Text)
Server.Transfer(Request.FilePath, True)
Else
Session("test") = Nothing
End If
End Sub