Ive done 'some' pair programming, it has been useful for knowledge sharing, but i can only do it for short'ish periods of time. it actually turned out more like 'live peer reviewing' < [Copyright me, here + now..!.]
when im looking over someones shoulder your instinct to just take over is very high, (but that can irritate, but not doing it can be like torcher), esp when the person is doing something very different to what you would do.
I agree with the end quality agrument, but actual time saved im not to sure about as you have 2 people and more discussion time (much more usually), and i have had some VERY heated discussions where different approaches collide.
and yup when your being the dev, its odd, you feel like you need to share (so much), and the tangents you can go of on are mad. (but thats knowledge sharing for you i guess)
So in summary (from experience) combinations of minimal live peer and post peer reviewing on code is best for quality and mental state of mind. But you need to have your happy personal place to retreat to when the other person has made you start loosing it.