Crystal Palace won for the fourth match in a row as Chelsea lost their 10-point lead at the top of the table.
Cesc Fabregas flicked in Eden Hazard's cross to give the Blues a fifth-minute lead, but Sam Allardyce's side 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 in the 11th minute.
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.