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.