My guess is its an unintended operation in your coding.. aka bug.
Have you tried moving the events that grabs the coordinates from the variables as close to the beginning of your restart routine as possible so as to minimize any interference,
You could also try putting 2 text objects on the screen and having them display cpX and cpY every tick.. this way you can debug what the data is when its acting funny and maybe see where its happening.
Lastly, if all else fails, don't use coordinates. Use the actual checkpoints to spawn the player via a variable for each toggled to On or Off (ie. current one is On, rest Off) and for example if checkPoint3=1 then CheckPoint3-SpawnInstance_Player or whatever... it would mean more coding but if you just can't solve your original problem it might work-around.