A well-placed 64th-minute header from Kolbeinn Sigthorsson was enough to secure victory for Frank de Boer's men, sending them back to the summit.
PSV made a bright start, with both Memphis Depay and new signing Bryan Ruiz looking lively in the opening minutes, but they never recovered after Sigthorsson had broken the deadlock.
Visiting goalkeeper Jeroen Zoet was forced into a great save to deny Davy Klaassen, while Viktor Fischer fired wide late on.
However, one goal proved to be enough for the hosts, who effectively ended any hope of a title challenge for PSV, who now sit eighth, 14 points adrift of the leaders.
Elsewhere, Feyenoord strengthened their own title credentials with an impressive 5-2 win away to Utrecht.
The hosts took the lead after 12 minutes thanks to Jens Toornstra's rifled shot, before Tonny Vihena's effort was deflected home by Ruben Schaken to level things five minutes later.
Feyenoord then went ahead through Graziano Pelle's backheeled effort, before Toornstra's tap-in midway through the first half squared things again.
From there, Feyenoord took over and Stefan de Vrij smashed home to restore their lead, while a close-range finish from Schaken made it 4-2 and Vilhena completed the rout.
At the bottom, NEC Nijmegen swapped places at the foot of the table with ADO Den Haag with a 3-1 victory over their fellow strugglers.
Danny Holla was adjudged to have brought down Marnick Vermijl after 18 minutes to give the hosts the chance to score from the penalty spot, despite replays suggesting that the challenge was outside the area.
Ryan Koolwijk missed the spot-kick but it mattered little as Kevin Conboy, Vermijl and Rens van Eijden scored to make Holla's goal for Den Haag irrelevant.
Cambuur also boosted their survival hopes with a 2-0 win over Go Ahead Eagles, courtesy of goals from Marcel Ritzmaier and Martijn Barto.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.