Technically, here's what it is:
(And yay, for once they've actually come up with a descriptive name, as you'll see)
First, you render your game the normal way, except for one thing. Instead of rendering to the screen (after which you can't do anything with it), you render it and save it as a texture.
Then you load up that texture, run a hell of a lot of shaders on that, and render the result to the screen.
Post-processing. Processing done *after* rendering.
The advantage is that you can then work on the final image, whereas in the first pass, you work on each object in isolation. You don't know which background the object is rendered against, what kind of colors are used in the entire scene, the average lighting levels and so on.
All that can be computed as a postprocessing pass. Then you can make bloom lighting (simply find bright areas and smear them out a bit), depth of field or a million other effects. Post-processing is basically just image manipulation, similar to what you can do in photoshop. (edit: Damn, Chaz beat me to that one)
It's also slow, because it requires a second render pass. And obviously, it's 100% GPU-dependant. (more specifically, 100% pixel shader-dependant. Vertex shaders are useless for the second pass, since all you really render is a screen-sized rectangle (4 vertices), with a texture on it)
running a vertex shader on 4 vertices is unlikely to stress any GPU. It's when all the pixel shaders have to be run a second time that the performance hit occurs