i wouldnt move the respawn marker, it would be better to have them respawn in the normal way then simply relocate them instantaneously, players wont notice the move.
Have the players run a respawn script that looks to see if booleans have been stated as true for each stage that you need, eg in this case i called them STAGEONE etc etc
Simply state the booleans to be true as each stage of your mission has been achieved, but in the respawn script simply check them in reverse order so that the script acts on the latest mission stage
~10
#START
@ !alive player
@alive player
?stagefour: goto "STAGEFOUR"
?stagethree: goto "STAGETHREE"
?stagetwo: goto "STAGETWO"
?stageone: goto "STAGEONE"
#STAGEONE
player setpos[getmarkerpos "marker1"]
goto "START"
#STAGETWO
player setpos[getmarkerpos "marker2"]
goto "START"
#STAGETHREE
player setpos[getmarkerpos "marker3"]
goto "START"
#STAGEFOUR
player setpos[getmarkerpos "marker4"]
goto "START"
Then create markers at each respawn location you want called marker1, marker2 etc etc
Use empty markers then you dont need to hide them from map view using command lines
Execute the script from the init.sqs using
?!(local server): exec "Respawn.sqs"
remembering to create a game logic named "server"
the ~10 is to simply stop the script from reacting to the soldiers initial spawn
Using the @command on a client side only script in this way doesnt cause much stress on the cpu or add to lag so dont worry about that, its a damn site more efficient than using a loop within the script to check