Cesc Fabregas flicked in Eden Hazard's cross to give the Blues a fifth-minute lead, but Sam Allardyce's side quickly rallied and struck twice in as many minutes.
Wilfried Zaha's shot from just inside the box levelled before Christian Benteke dinked in his 10th goal of the season on 11 minutes.
Chelsea pushed in a bid to avoid only a second home defeat of the season but could not beat Wayne Hennessey, who saved superbly from Diego Costa, Marcos Alonso and Eden Hazard.
The win sends Crystal Palace four points clear of the relegation zone in 16th.
Chelsea are seven points ahead of Tottenham Hotspur, who won at Burnley.