When the Jump To Stage (JMP) instruction is executed, it does NOT cause an immediate jump to the target Stage logic, it only disables the current Stage and enables the target Stage. The effect of this instruction will occur the next time those Stages are normally processed as part of the controller's scan. This means that any ladder logic instructions between the Jump To Stage (JMP) instruction and the end of the Stage will still be executed.
One way around that is to use the current stage as an enabling condition
SG S1
...
some terminating condition
JMP S2 (this turns ON S2's bit but also turns OFF S1's bit, but the program pointer is still within S1 on this scan)
S1 contact AND ... // if the JMP S2 happened, this logic will not be "enabled" because S1 will be OFF
S1 contact AND ... // ditto
S1 contact AND ... // ditto
There are other ways around this:
SG S1
...
(termination condition)
OUT Terminate_S1
Terminate_S1 NOT contact AND ...
Termiante_S1 NOT contact AND ...
...
Terminate_S1 NOT contact AND ...
Terminate_S1 contact JMP S2
SG S2
FYI, the EXIT instruction does NOT behave this way - it tweaks the processors program counter to the end of the code-block. So if you have a conditional EXIT condition, the rest of the code in that code-block WILL be skipped (that implies the remainder of the code within that Stage).