Are you manually moving the carriage in between cuts, and zeroing out at home? If repetier/pronter thinks the carriage is away from the intended starting point, it’ll truck along in a straight line to wherever it thinks it should be. Even in relative positioning mode, it should be remembering that relative origin.
Your current Gcode starts off with a G90 (absolute positioning) and then:
G00 X0 Y0 Z0 (move to last set home)
I would expect your starting gcode to roughly say:
G91 ; Relative postioning mode G92 X0 Y0 Z0 ; Set that we are currently home, all measurments are from here. G00 .... ; Your first move
Then the Gcode should go off as planned, unless I’m way off base.
Hope this helps,
–Edit, I think I understand your desired behavior better.