qhobbes, you're focusing on performance, not the actual issue at hand here -- the capture resolution is not consistent between game states.
I remember playing this game back in the day... back in the good old days where games would switch resolutions on the fly because CRTs could display native resolutions.
Unfortunately, I'm not familiar enough with running this game in relatively modern windows environments, so I'm not able to comment about specifics about which wrapper in the pipeline might be causing issues.
Something I would try is putting a scale/resize filter on each of your video capture methods, and set it to 640x480. See if any of them work, and get rid of the ones that don't.
If none of those behave as expected, then there might be a way that you could use something like AHK to detect when desktop resolution changes, and feed a hotkey back into OBS to change source visibility (having separate sources for each size situation). I'm just not sure of the specifics for how to detect it.