Marco Reus gave Dortmund an early lead and it seemed like Jurgen Klopp's men were going to get the win they were looking for at the end of 2013.
However, reported Dortmund target Adrian Ramos brought Berlin level with his 11th goal of the season midway through the first half and Sami Allagui sealed victory for Jos Luhukay's men on the stroke of half time.
There was no indication of the struggles to come for Dortmund as they made a bright start and took the lead in the seventh minute.
Captain Sebastian Kehl lifted the ball over the top of the Berlin defence and Reus did not hesitate as Thomas Kraft raced off his line to meet him, turning the ball in with just one touch from a narrowing angle.
A low cross from Henrikh Mkhitaryan caused havoc in the Berlin box as Dortmund piled on the pressure, but as has been the case so often this season, they failed to make the most of their best spell of the game, and they were punished.
Erik Durm lost possession in midfield and Allagui raced down the right wing before sending in a low cross which was met by Ramos at the near post for his 11th goal of the season.
Allagui powered his way through four defenders, but his last touch took the ball too closer to goalkeeper Roman Weidenfeller as Hertha started to take the upper hand.
Another defensive mistake, this time from Marian Sarr, then gifted Hertha the lead.
He casually left the ball to Allagui, who skipped exquisitely past Roman Weidenfeller before slotting the ball in just before half time.
Jonas Hofmann and Julian Schieber were both sent on by Klopp, but there was now no way through the mass ranks of Hertha defenders.
Over seven minutes of stoppage time were played, but the game could have carried on all night and still Dortmund probably would not have scored as they had to accept defeat at home for the fourth time this season, leaving them 12 points behind Bayern, who have a game in hand.