Birmingham leapfrogged West Brom to take second spot in the Championship thanks to a Cameron Jerome goal.
Ten minutes before the break Nicklas Bendtner cut the ball back for Jerome, who turned and fired past keeper Gabor Kiraly from close range.
Paul Ifill almost equalised on the stroke of half-time for Palace, but his shot cannoned back off the bar.
The win leaves Birmingham three points behind Derby, though Steve Bruce's side have a game in hand over the leaders.
Crystal Palace manager Peter Taylor on their play-off chances:
"I'm realistic enough to know we need to go on an amazing run now and we need to play much better than we did today.
"It was a very disappointing performance. We didn't create enough chances and we didn't deserve to win.
"When we hit the post in the first half I thought it may have given the players some confidence for the second half. We needed to start like that again - and we didn't."
Birmingham manager Steve Bruce:
"It was a good performance and I felt we were worthy winners. It's just a shame our best performances are away from home.
"We need to forget all the nonsense that's gone on and the whole club needs to look forward. We don't have a divine right to be top of the league.
"We seem to have a crisis here whenever we lose two games. We've been in around the top all season and yet there's always a crisis."
Crystal Palace: Kiraly, Borrowdale, Hudson, Cort, Butterfield, Ifill, Fletcher, Lawrence, Kennedy (McAnuff 59), Freedman (Scowcroft 73), Kuqi (Morrison 60).
Subs Not Used: Speroni, Ward.
Booked: Fletcher.
Birmingham: Doyle, Jaidi, Martin Taylor, N'Gotty, Sadler, Clemence, Muamba (Larsson 79), Johnson, McSheffrey, Jerome (Danns 88), Bendtner (Vine 81).
Subs Not Used: Maik Taylor, Campbell.
Booked: Larsson.
Goals: Jerome 34.
Att: 17,233
Ref: S Tanner (Somerset).