Lewis Grabban scored a 90th-minute winner as West Brom lost their third straight Championship fixture. Neil Clement put the Baggies ahead with a free-kick but Clinton Morrison equalised from 15 yards.
Martin Albrechtsen was sent off two minutes after replacing the injured Curtis Davies - the defender making a last-man foul on Michael Hughes.
Ben Watson scored the subsequent penalty but Kevin Phillips equalised from 18 yards before Grabban struck.
West Brom boss Tony Mowbray:
"We got hit by a sucker punch. There was a flatness about the game. "I was looking for a high tempo but it did not come until after we had a man sent off."
Crystal Palace boss Peter Taylor:
"It was dramatic. "West Brom showed lots of character with 10 men. They have some outstanding players and cause you problems.
"To get to the play-offs, we need a few of them up there to get nervous and have a real stumble. We also have to play to our top form."
West Brom: Kiely, McShane, Clement, Curtis Davies (Albrechtsen 38), Robinson, Greening, Chaplow (Koren 58), Koumas, Gera, Phillips, Kamara.
Subs Not Used: Daniels, Carter, MacDonald.
Sent Off: Albrechtsen (41).
Booked: Phillips.
Goals: Clement 26, Phillips 76.
Crystal Palace: Kiraly, Lawrence, Cort, Hudson, Borrowdale (Butterfield 72), Watson, Soares, Fletcher, Hughes (Grabban 86), Morrison (Martin 78), Scowcroft.
Subs Not Used: Speroni, Freedman.
Goals: Morrison 35, Watson 42 pen, Grabban 90.
Att: 17,960
Ref: K Friend (Leicestershire).