© Getty Images
Gareth Barry came close to giving the home side the lead just a couple of minutes in, but his header from a corner went just over.
However, the visitors soon found their way into the match, and managed to take the lead in the 23rd minute when Jason Puncheon fired in after Tim Howard parried the ball away from a Yannick Bolasie strike.
Bolasie came close to doubling Palace's lead before the break, but saw his shot bounce back off the post, before Howard kept out Cameron Jerome's rebound.
© Getty Images
The two-goal deficit forced Roberto Martinez to make all of his changes before the hour mark, but it yielded results as Steven Naismith pulled one back for the Toffees, bundling the ball over from a Leighton Baines header.
However, Palace were able to restore their cushion 12 minutes later, with Puncheon playing the ball in for Jerome to curl it into the bottom corner.
Barkley tried to get Everton back into the match inside the final 10 minutes, but Julian Speroni managed to deflect the ball away with his foot.
The home side continued to push hard to get a goal back as full time approached, and were able to do so when a Barkley shot deflected in off Kevin Mirallas.
Everton pressed throughout stoppage time, but were unable to force a third goal and snatch a point from their opponents.
The result leaves Everton fifth in the Premier League table, one point behind Arsenal, while Palace climb to 11th.