I plugged the position into SF10. It gave 0.00 evals for all of its top choices, which were 22.b4, 22.Qd3, 22.Qe1, 22.a4.
The 22.b4 line ran 22.b4 c5 23.Bb3 cxb4 24.cxb4 Bb5 25.Qe1 Rxd2 26.Qxd2, so White does wind up with the d-file.
A later note indicates that Botvinnik considers this key to the position; because the dark-square bishop has to defend the pawn on e5, Black can't contest the d-file. SF agrees with Botvinnik's determination, but disagrees with his evaluation of the consequences. As Matthew Sadler points out in <Game Changer>, an engine's 0.00 can conceal a great deal of complexity. To any human, controlling the d-file would seem very important.
So when/how <did> White get a big advantage? Here is the position after 24.Qxd2.
click for larger view
The game continued 24....Bxb3 25.axb3 Qe6 (preparing ...Bf6 and ...Rd8, but there isn't time) 26.c4 Bf6 27.c5 Nc8 (27....Rd8 28.Qxd8+) 28.Qd7 and White was winning. It appears that Black's 24th, 25th, and 26th moves -- none of which draw any comment from Botvinnik -- were all errors. In engine terms, at a shallow search depth the eval jumps to about +0.8 after 24....Bxb3, about +1.8 after 25....Qe6, and about +3 after 26....Bf6.
At move 24, the engine likes Ra8 followed by ...Bf8. If White does nothing, Black can then play actively with ...a5 or just sit on the position. Critically, after 24....Ra8 25.Qd3 Bf8, 26.Nxe5 loses to ...Bxb3.
After 24....Ra8 25.c4, Black can play 25....Nd7 (because, unlike in the game, the bishop defends the d7 square) 26.c5 Nf6 27.Bxe6 Qxe6 28.Qd3 a5=.
But after 24....Bxb3? 25.axb3, the advance of White's queenside pawns is much stronger, and impossible to stop. For example, 25....Re8 26.c4 c5? 27.bxc5 Qxc5 28.b4 Qe7 29.c5 Nc8 30.Nd5 +/. SF's favorite defense is the weird-looking 26....Bf8 27.c5 Na8!, to be followed by ...Nc7 and ...Nb5.
One other note: Botvinnik writes that 22....f5 would be bad because of 23.ef gf 24.Rxd7 Rxd7 25.Nxf5 <and White develops a strong attack>. But in fact 24.Rxd7 is just a blunder, and Black has near equality after Rxd1+ 25.Qxd1 Qd7. Instead 24.Nh4 is completely winning, given the twin threats of Nxf5 and Ng6. (For that reason, 23.Nh4 is more accurate than 23.exf5.) This is why it's good to use an engine to check even the most conscientious (and Botvinnik, compared to, say, Keres, wasn't always conscientious) human annotator.