self.oldorigin is used by all quake engines in case the player is stuck, it teleports them back to that location, if they aren't stuck it updates it to match their .origin, so they basically get stuck on something rather than getting embedded in it when the physics breaks, it's a better behavior.
A side effect is that if you have a info_teleport_destination or info_player_deathmatch that is slightly in solid, the teleport (or spawn in) will teleport them back to their self.origin before the event in question, because the new position is "bad".
As a rule of thumb I usually assign self.oldorigin = self.origin after teleporting or spawning a player, so that it will try to unstick them in other ways rather than sending them back to where they died or whatever.
I've posted a new darkplaces build just now which should improve collisions significantly on slopes and such.