The server results make sense to me, and the XAMPP results do not. It would appear that in the XAMPP environment, the old session is never being recognized at all. So session_start() creates a brand new one with a new ID (that's ID change #1) and then your session_regenerate_id() call creates a further new one (that's ID change #2).
To test, capture the session ID immediately after session_start(). The question should become, not "Why are two IDs being generated in my script?" but "Why is my script not finding and loading a valid session on session_start()?"