Noel Hunt came off the bench to secure three points for the Royals and end Birmingham's six-game unbeaten streak.
The Irishman converted Jobi McAnuff's cross at the front post with his first touch of the game on 75 minutes.
Moments earlier, Reading defender Alex Pearce almost diverted the ball into his own net, the ball hitting the post.
But Hunt made an instant impact off the bench to end a run of three draws at the Madejski and inflict a first league loss on the Blues since September.
In a lively and entertaining contest, both goalkeepers were in sensational form.
A first half filled with chances and half-chances saw Myhill deny Kaspars Gorkss and Joseph Mills, while Adam Federici in the hosts' goal continuously frustrated Birmingham striker Chris Wood.
After half-time Reading winger McAnuff was superbly foiled by Myhill before Hunt popped up to steal all three points for the home side.
Hunt, who had only been on the pitch a matter of seconds a substitute for Simon Church, tapped McAnuff's cross home at the near post.
It was the first goal Birmingham had conceded for exactly 500 minutes, and it left Reading with 15 more to hold on.
And that is exactly what they did.
Reading 01 Federici 05 Pearce 16 Mills 17 Gorkss 24 Cummings 04 Karacan 08 Leigertwood 11 McAnuff 14 Kebe (Robson-Kanu - 69' ) 09 Le Fondre 18 Church (Hunt - 75' ) Substitutes 31 Andersen 23 Harte 19 Robson-Kanu 10 Hunt 22 Manset Birmingham 01 Myhill 02 Carr 04 Caldwell 06 Ridgewell 23 Spector Booked 24 Davies Booked 07 Burke 15 Elliott (Redmond - 82' ) 18 Fahey 09 King (Zigic - 82' ) 39 Wood Substitutes 13 Doyle 03 Murphy 08 N'daw 22 Redmond 19 Zigic