I'm over the moon. I was missing a call to GL.Viewport() to set the full screen bounds exactly as you said. And it was rendering all red because I wasn't clearing the texture GL.BindTexture(TextureTarget.Texture2D, 0) before re-drawing it - I'm a fool.

But it's all working now:

Standard:

Stretched FBO:

Thanks for the other notes and my incorrect GL.PushMatrix() GL.PopMatrix() usage.

You mention shaders and not using the fixed pipeline. If you have any links to resources which show how I could achieve this with shaders I'd like to have a look. I take it this fixed pipeline approach is non-standard?

You mention shaders and not using the fixed pipeline. If you have any links to resources which show how I could achieve this with shaders I'd like to have a look. I take it this fixed pipeline approach is non-standard?

Not non-standard just old style and much less flexible than shaders.
If you can afford it, I would recommend an e-book called "OpenGL 4.0 Shading Language Cookbook". It is a quick way in to shaders. Others might like to offer advice on good shader language web sites.