Looping walk cycle animation snaps back on repeat
Oh dear, I feel kind of stupid but also so glad I worked it out.

So this is the setup that works.

Action 1: walk - in-place walk cycle

Action 2: moveForward - moving the root bone in time with the feet to avoid slipping. F-Curve modifier set to repeat with offset.

Convert both animated actions to action strips on the NLA editor. Here's where I was going wrong and what to do right. I was setting the repeat value on both strips. This worked for the walk cycle which has the same start and end frame so the "snapping back" isn't noticable but caused the character to walk forward then snap back at the end of each forward motion cycle. In essence it was only repeating the first F-Curve and ignoring all the future repeats with offset. To fix this I set the repeat value on moveForward to 1 and then set the end frame to what I wanted. This then allows the character to keep moving forward, applying any extrapolated future F-curve repeats to the motion. This also allows for extra animations to be layered on top.

For example if you have a walk cycle that's 25 frames long and you want the character to walk straight for 10 seconds (assuming 25 fps) you can set the walk action repeats to 10 and the end frame for the moveForward action to 250 frames (leaving the repeats and scale to 1).

I now realise that this is pretty much exactly what Adhi said in the other question I linked to but it didn't quite make sense to me for some reason. Anyway. I hope this will prove a useful tip for anyone else stuck on a similar looping animation problem.