The hosts dominated the first half and deservedly took the lead when Bernard volleyed in Theo Walcott’s superb cross.
But Palace, without a win so far in 2020, fought back after the break and equalised when keeper Jordan Pickford allowed Christian Benteke’s low strike to go under his body.
Everton then had to withstand a spell of pressure from the rejuvenated visitors but restored their lead when Richarlison ran through the Palace defence and slotted into the bottom corner.
Pickford saved superbly from Benteke’s close-range header to protect the Toffees’ lead, before Dominic Calvert-Lewin sealed victory when he prodded in after Richarlison’s header had hit the crossbar.
The win leaves Everton just one point behind fifth-place Tottenham Hotspur, who have a game in hand.
Crystal Palace remain six points above the relegation zone in 14th place, but all of those below Roy Hodgson’s side now have a game in hand.