Alexander Meier put the hosts ahead after just five minutes before Haris Seferovic capitalised on a dreadful defensive mix-up involving Matthias Ginter and Roman Weidenfeller
Jurgen Klopp's men slumped to 18th courtesy of Stuttgart's win over Freiburg on Friday, and missed the chance to hit back in the weekend's final game as Alexander Meier and Haris Seferovic took advantage of glaring BVB errors.
Dortmund appeared to have turned the corner somewhat after a dreadful start to the domestic campaign by taking four points from their last two top-flight matches.
But Sunday's clash at the Commerzbank-Arena displayed all the frailties of last-season's runners-up, and they have now lost eight of their 13 Bundesliga games this term.
To add to Klopp's woes, Lukasz Piszczek was added to his lengthy injury list - which includes Marco Reus, Mats Hummels, Sokratis Papastathopoulos, Ciro Immobile, Oliver Kirch and Jakub Blaszczykowski - when he limped off late in the first half.
Dortmund were behind after just four minutes when yet more suspect defending allowed Meier to calmly slip home the opener.
And further defensive weakness - this time a mix-up between Roman Weidenfeller and Matthias Ginter - gave Seferovic the chance to roll the ball into an open net to seal the points, and deepen Dortmund's crisis, 12 minutes from time.
Dortmund actually started the game relatively brightly before falling victim to a simple clearance from Frankfurt defender Marco Russ.
As visiting centre-backs Neven Subotic and Ginter switched off, Meier stayed onside and latched onto the long ball before tucking away his eighth Bundesliga goal of the campaign.
Henrikh Mkhitaryan almost equalised soon after - Felix Wiedwald equal to his shot - although it was Frankfurt who came closest to scoring the next goal.
Anderson Bamba saw a header drift wide before Stefan Aigner's dangerous delivery was cut out by Piszczek amid some desperate Dortmund defending.
Dortmund forward Pierre-Emerick Aubameyang was then denied by Wiedwald before Kevin Grosskreutz came a post's width from levelling shortly before the half-hour mark.
Klopp's men had the better of the latter stages of the first half but lacked a decisive final ball, with their frustrations capped by Piszczek's withdrawal and an offside flag after Kagawa had the ball in the net.
Marc Stendera had the first chance of the second half - Weidenfeller grateful for a Ginter block that diverted the effort off target - while Wiedwald continued to frustrate the visitors with a smart save from substitute Adrian Ramos.
That led to a period of sustained Dortmund pressure before the hour mark, but Frankfurt stood firm and should have doubled their advantage when Meier spurned a free header inside the area.
However, Seferovic took advantage of another costly error in the 78th minute, as Ginter's wayward header failed to find Weidenfeller and allowed the Swiss to round off the scoring and move Frankfurt up to ninth.