Made some progress, just updating here in case it helps anyone else. It surprises me with all the Replicator clones out there that it was so hard to switch to Cura. I guess folks are happy with Makerbot desktop.
M71 works great. Shows a message and waits for a press of the M (OK) button.
I adapted humanize-gcode to work better for debugging, have an extra feature
--debug_start_line n : Add in M71 (<gcode description>) before every line from the line specified
This way I could enable this for 10 lines prior to where the printer was doing funny things, and isolate the line that was causing the funny move. The terminal in Octoprint shows line numbers, but because of buffering I guess, the lines are not synced with what the printer is doing, so this helped me.
In this case it was M135 T1, switching to the second tool head, which was sending the print head out of bounds to the left. So looking at the Sailfish resources, the firmware toolhead offsets get applied at this point. Using Makerbot Desktop, I could see that there was a crazy value in the first offset field, 33000 steps. I set that to zero to test it, then tuned it to be aligned with the other nozzle. Don't bother with ReplicatorG to update onboard settings, it doesn't work.
It wasn't necessary to add the dry run feature to humanize-gcode, because there is a great plugin for this for Octoprint. I didn't bother with the emergency stop, because only interrupting power can halt a gcode move which is underway.
I guess for the Replicator clones out there, the little hidden reset button at the back is the best bet.
If anyone else needs to debug gcode on a Makerbot flavour machine, let me know and I'll either send a pull request or fork humanize-gcode. Thinking of doing that because it only supports Marlin and Smoothie flavours at the moment, and I can see how to add support for Makerbot flavour.