My experience has been that very seasoned developers and very green developers make for difficult pairings. The ideal pairings I have foudn are senior-senior, senior-intermediate and intermediate-junior. senior-junior pairings tend to intimidate the junior and tend to frustrate the senior. intermediate-intermediate may lead to slower learning. But that last one, I'm not sure about.
In XP the pairing has nothing to do with seniority. Pair programming in XP works only if Personal Egos do not interfere woth work. I have found lot more egos in Software engineering than any other field. As for pairing senior- junior, it is mostly done to get the junior on speed with the practices followed in the organization and also is the best way to lear OOP
My Experience has found pair programming as defined in XP very unproductive on everyday programming. What I found working is code review with a peer and also on bug tracking. It does help in designing too. Coding ???, just my experience / opinion