Thomas Gravesen's second-half penalty kept Everton third in the Premiership.
Gravesen sent Maik Taylor the wrong way in the 69th minute after Muzzy Izzet was sent off for handling Lee Carsley's goalbound effort off the line.
Everton delivered another performance of discipline and resilience to continue their outstanding season.
Emile Heskey had a header cleared off the line by Tony Hibbert and substitute Dwight Yorke also missed a great chance, but Everton held on.
The first half was a cagey affair, with little attacking flair on show from either side.
Defences were in almost total command, although goalkeeper Taylor gave Birmingham a scare when he dropped Gravesen's free-kick.
Everton were content to wait and hit on the counter-attack, but they almost took the lead in a goal-mouth scramble which saw Kenny Cunningham block crucially from Leon Osman.
Birmingham striker Heskey has struggled for goals, but he was almost on target three minutes before the interval when he got on the end of Jesper Gronkjaer's cross but lobbed narrowly over the bar.
The game continued in the same low-key vein after the interval, and Birmingham attempted to give themselves more attacking options by sending on Stan Lazaridis for Stephen Clemence on the hour.
Heskey had another chance after good work by Izzet, but he was again off target.
And Everton took advantage to go ahead after 69 minutes.
Taylor saved brilliantly when Cahill's header was deflected off Mario Melchiot.
But he was out of position when Carsley fired in a shot from the edge of the area, which Izzet handled off the line.
Izzet was sent off and Gravesen coolly sent Taylor the wrong way from the spot.
Birmingham almost responded instantly, with Heskey's header cleared off the line by Tony Hibbert.
Leon Osman wasted a great chance to make certain of victory for Everton with 11 minutes left, firing narrowly wide from 10 yards.
And in the dying seconds Yorke wasted a glorious opportunity to equalise, but blazed over with the goal at his mercy.
Birmingham: Maik Taylor, Melchiot, Cunningham (Yorke 73), Upson, Gray, Johnson, Savage, Clemence (Lazaridis 61), Gronkjaer (Anderton 81), Izzet, Heskey.
Subs Not Used: Bennett, Clapham.
Sending Off: Izzet (68).
Everton: Martyn, Hibbert, Stubbs, Weir, Pistone, Cahill, Carsley, Gravesen, Kilbane, Osman (Ferguson 88), Bent (Watson 90). Subs Not Used: Wright, McFadden, Naysmith.
Goals: Gravesen 69 pen.
Referee: R Styles (Hampshire).