Thanks for the suggestions!
Try with $wgOut. Doing $wgOut->redirect('', '200'); may be enough to disable that.
This only seems to give me an error:
Fatal error: Call to a member function getNamespace() on a non-object in includes/Skin.php on line 218
It'll probably disable the redirect thing, but the rest of $wgOut would still be messed up, so you'd still need to clone and restore $wgOut.
Well I saved/restored $wgOut, $wgRequest and $wgTitle but it had no effect. Looking through the API, it looks like it already does this to some extent:
# Fake $wgRequest for some hooks inside EditPage # FIXME: This interface SUCKS $oldRequest = $wgRequest; $wgRequest = $req;
So it looks like more hunting will be required to find out exactly what needs to be saved.
Cheers, Adam.