There's definitely benefits to having a tightly integrated team with plenty of knowledge sharing. My problem with pair programming is that it is frequently an attempt to create those benefits via force.
Also, with traditional pair programming (one driver, one navigator) you're allocating two programmers on a single task, meaning that pair will need to generate at minimum the equivalent work of two programmers operating independently. I've never seen that work out to be true.
The only argument for pair programming I've ever subscribed to is that it can be used to more rapidly educate inexperienced programmers. If you compared the relative costs of inexperienced vs experienced programmers that math might pan out. Of course, then you have skilled programmers you're potentially underpaying, which is a problem in and of itself.