First, the engine calls ClientConnect. This means that the player begins connecting to the server. The game can refuse entrance to a client by returning false. Changing levels will NOT cause ClientConnect to be called again, but "loadgames" will.
If the client is allowed, the connection process will continue and eventually ClientBegin will be called by the engine. This function actually calls PutClientInServer. ClientBegin itself does not do much, it is more of a kick off for PutClientInServer and ClientendServerFrame.
PutClientInServer takes care of the actual spawning of the player's body. It selects the spawn point, clears and configures the edict for the player and links it into the chain of active edicts in the engine.