Phillip Cocu's men had a one-man advantage for over half an hour as Heerenveen's Stefano Marzo was shown a straight red card after 32 minutes.
But numerical parity was restored as Joshua Brenet saw red with just over 20 minutes remaining.
And it got worse for PSV, who were consigned to a second defeat in three league games by Daley Sinkgraven's 78th-minute strike.
The result means Heerenveen are now six games unbeaten in the league and Dwight Lodeweges' side are only one point worse off than PSV.
Twente are a point further back after maintaining their own good run with a 3-1 win over Utrecht.
Kyle Ebecilio opened the scoring early on and the lead was doubled midway through the second half when Chris Kum put through his own net.
Utrecht were given hope by Yassin Ayoub soon after but he was sent off a minute before the end and Luc Castaignos wrapped the game up with his fourth goal of the season as Alfred Schreuder's side continued their unbeaten start to the campaign.
Elsewhere, Groningen bounced back from two straight league defeats with a 1-0 win over Willem II and Excelsior drew 1-1 with Cambuur.
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.