I really enjoy pair programming, too. In my experience, one of the most annoying parts of programming is making tactical mistakes in the implementation. This is the level that's a little higher than the level of syntax correctness, but lower level than overall system design. When you are hacking, you need to devote fairly close attention to getting the code right, with the result that sometimes you can write some really inelegant and ugly code that is still technically correct. And since you paid so much attention to it, you can't see that it's ugly until a few days have passed and your mind is no longer focused on it-- at which point it's usually acquired enough dependencies to make fixing it anoying. Having a partner watching the code take shape means that he can point out these errors just as they are happening, so that you can correct them before they accumulate a set of dependencies that will slow fixing it.

Refactoring and test sets let you fix these kinds of errors faster, but pair programming means that you frequently don't make them in the first place.