Typically, if one applies outerPlan() or outerPlanState() to the wrong pointer, the mistake will become obvious upon even minimal testing. My concern here is more about usages in edge cases that perhaps escape testing, for instance in the arguments of an elog() for some nearly-can't-happen case.
Yeah, concur with that. For edge case usages maybe we can use the local-variable style to avoid wrong-pointer mistakes.
Update the patch to include changes about righttree. But this doesn't include changes for edge case usages. (A rough look through shows to me that the current usages should be able to be covered by tests.)