The Schwarzgelben's failure to add to their lead was marred by two late Hoffe penalties, as the visitors will now face Kaiserslautern in a relegation playoffBorussia Dortmund ended the Bundesliga season with Kevin Grosskreutz playing goalkeeper after Hoffenheim netted two late penalties to salvage a 2-1 victory at Signal Iduna Park on Saturday.
Robert Lewandowski gave BVB the lead inside six minutes, and the signs pointed to a comprehensive home success, but Roman Weidenfeller's red card and two spot-kicks from Sejad Salihovic deep in proceedings handed the visitors a reprieve as they avoided automatic relegation and advanced to a relegation playoff with Kaiserslautern.
And as if that was not a bitter enough pill for the hosts to swallow, they were forced to endure the heartache of a disallowed goal in the third minute of stoppage time.
Nonetheless, Dortmund made a bright start to the match as Jakub Blaszczykowski fired an early warning shot, and it was swiftly followed up when Lewandowski struck the ball past Koen Casteels from close range.
They continued to probe, with Kuba a constant thorn down the right flank as he looked to infiltrate the leaky Hoffe backline, and he almost came up trumps again were it not for the goalkeeper's quick charge.
More chances ensued, but neither of the Polish pair could find a way past Casteels, and it increasingly looked as if the strugglers - in need of all three points - would hold out for a late smash-and-grab.
The second half produced more of the same, although Hoffenheim began to find some solace through the darting runs of full back Fabian Johnson and the aerial prowess of substitute Sven Schipplock.
But Dortmund was to be punished as Mats Hummels' foul in the box on 76 minutes allowed Salihovic to step up and blast the penalty into the top right corner.
Quite incredibly - six minutes later - Dortmund was forced to rue its profligacy when Roman Weidenfeller was given his marching orders for a professional foul, and Salihovic was at it again from 12 yards out.
With all three BVB substitutes used, Kevin Grosskreutz assumed goalkeeping duties for the last 10 minutes, but it was Dortmund which found the net in injury time - although Lewandowski's effort was ruled offside.
Dortmund must now regroup ahead of the Champions League final on May 25 - and even more so following Bayern Munich's impressive turnaround against Monchengladbach.