You can find these answers on your own: add messages inside the ham spawn hook and see if it is called when you need it to be called.
Also, there are no glitches. Hamsandwich hooks functions directly from the game code. Ham_Spawn hooks CBasePlayer::Spawn(this is how the game spawns a player) so literally you can't be more accurate than this.