Despite going down 2-0 on the south coast last Saturday, two goals from Cameron Jerome gave them the three points.
Substitute Kanu pulled one back in the dying minutes but with Pompey already five points from safety and facing a likely nine-point deduction, this proved of little consolation in their uphill battle for survival.
Despite looking settled in the opening stages, Pompey’s defence began to look nervy and this allowed Jerome to fire the visitors ahead after 16 minutes.
He latched on to Christian Benitez’s pass through the home rearguard before slotting the ball coolly to David James’ right. Birmingham had a penalty appeal rightly turned down three minutes later, when Benitez fell under pressure from Hermann Hreidarsson.
Referee Mike Jones booked the Blues striker for diving.
Alex McLeish’s side nearly doubled their advantage after 26 minutes. Benitez was found by Michel’s ball forward and squared for Craig Gardner, whose shot whistled just wide of the target.
Pompey looked far from the assured side which knocked Birmingham out of the FA Cup and Benitez nearly made it two six minutes before the break.
A through ball from Jerome helped the Ecuadorian beat the Pompey offside trap.
He rounded James, but his run was halted by a stunning, last-ditch tackle from Hreidarsson.
Birmingham put daylight between themselves and Pompey three minutes later, though, when Benitez back-heeled the ball to Jerome who shot under the diving James.
With things clearly not working for Pompey, Grant brought on Quincy Owusu-Abeyie and Angelos Basinas for the ineffective Marc Wilson and Danny at the interval.
Quincy proved much better at holding up the ball as his pace, power and skill helped Pompey take control of possession at the start of the half.
However, substitute James McFadden nearly made the points safe for Birmingham after 81 minutes when he turned Pompey defender Tal Ben-Haim, but James was equal to his low effort.
Dindane came agonisingly close to pulling one back when he had a stunning attempt from the left side of the box tipped over by Hart.
But Kanu made no mistake and headed home O’Hara’s cross from the right after 90 minutes to set up a nervy finale for the visitors.
PORTSMOUTH: James, Finnan, Ben-Haim, Hreidarsson, Belhadj, Brown (Kanu 65), Wilson (Owusu-Abeyie 46), O’Hara, Webber (Basinas 46), Piquionne, Dindane.
BIRMINGHAM: Hart, Parnaby (Tainio 52), Johnson, Dann, Ridgewell, Gardner, Ferguson, Michel (Larsson 77), Fahey, Jerome, Benitez (McFadden 80).
Referee: Michael Jones.