http://www.gamedev.net/community/forums/topic.asp?topic_id=537265&whichpage=1
First create a ResolveTexture2D in your game LoadContent Method:
renderTargetTexture = new ResolveTexture2D( graphics.GraphicsDevice, graphics.GraphicsDevice.PresentationParameters.BackBufferWidth, graphics.GraphicsDevice.PresentationParameters.BackBufferHeight, 1, graphics.GraphicsDevice.PresentationParameters.BackBufferFormat);
Then enable the back buffer in the drawing method after painting the scene:
graphics.GraphicsDevice.ResolveBackBuffer(renderTargetTexture);
Finally, draw the captured back buffer using spritebatch when your game is paused in the Draw method:
spriteBatch.Draw(renderTargetTexture, Vector2.Zero, Color.White);
If you want the image to be grayscale, you need to write a pixel shader and load it using the effects file into your LoadContent, and then set the effect before painting the texture using spritebatch.
Peter source share