Report as inappropriate

Thanks a ton for this. I went with Option A and it worked great. A couple notes others may find useful:

First, I chose to add a beep when the print pauses via M300, so that the final line reads:

{REPLACE "\nM117 Layer 4, Z=" "\nG1 X10 Y5\nM300\nM0\nM117 Layer 4, Z="}

This lets me go into another room and do something else without risking forgetting about the print and leaving it on pause indefinitely.

Second, a tip for OctoPrint users. Like other people on this page, I needed to raise the extruder to make the switch on a particular print where I wanted a color change after only a couple layers. I found that I didn't need to make any further changes to the post-processing script, though: OctoPrint recognized that I was paused, allowed me to use the OctoPrint controls to raise the extruder, and then picked up right where it left off when I clicked on Resume. When I do this, I'm careful to lower Z by the exact same amount that I raised it before resuming.

I have no idea how much of this is specific to my setup (OctoPrint plus a Duplicator i3 running ADVi3++ firmware), so your mileage may vary. (I used M25 instead of M0 to pause because of the note here about the Duplicator i3.)