Hi Vaderman
Thanks for the reply, you can have Retroarch automatically change resolution when you load a core. In my example, for my main retroarch.cfg, I have windowed fullscreen mode off as you suggested and I'm using 320x240 as retroarch's main resolution.
In the config folder you have a folder and config file for each core, and you can put video_fullscreen_x and y settings in these, and when loading a core Retroarch will automatically change resolution for you. In order to create the config files for each core you can load a game using the core and in the quick menu use the Retroarch 'save core overrides' option, it will create the config\core\core.cfg file and you can put in your custom resolution lines. In future when loading that core, retroarch will change resolution for you.
This all works fine for me under D3D, under GL it will always just display at desktop resolution - for me that's 320x240. I tried manually loading a config file as you suggested but it sitll won't change under GL for me.
My workaround is to have two shortcuts, one loading Retroarch with default config using d3d so most emulators work and can automatically change resolution, and another shortcut ("retroarch.exe --config retroarchgl.cfg") loading an alternate main config using GL instead, for those GL-dependent emulators. It means they can't change out of 320x240, but there's not too many. Maybe this'll get fixed eventually