Everton came from behind to break Crystal Palace’s club-record 19-match unbeaten streak, with Jack Grealish scoring a thrilling 93rd-minute winner.
Daniel Munoz’s neat 37th-minute finish put Palace on track to win their third Premier League game in a row, as well as three consecutive league triumphs on the road.
Everton were second best for lengthy stretches, with Tyrick Mitchell shooting against a post before Munoz scored his second goal in a row.
Ismaila Sarr found the Colombian winger in space on the right side of the box, and Munoz poked it past Jordan Pickford, who was making his 300th Premier League appearance for Everton.
The Toffees, who replaced teenagers Tyler Dibling and Thierno Barry at the start of the second half, increased their tempo after halftime.
They equalized in the 76th minute when Iliman Ndiaye scored from the penalty spot following Maxence Lacroix’s clumsy foul on replacement Tim Iroegbunam.
The game appeared to be heading for a draw until Grealish, on loan from Manchester City, scored his first goal in a Toffees shirt after Beto’s header was saved at close range by Dean Henderson.
Palace suffered their first defeat in all competitions since April 16.