Ciro Immobile appeared to have got BVB back on track early in the second half after Kevin Vogt had given the Billy Goats the lead, only for an uncharacteristic error from Roman Weidenfeller to gift Simon Zoller the winning goal 16 minutes from time.
After 427 days on the sidelines, Dortmund midfielder Ilkay Gündogan made his competitive return alongside fit-again duo Marco Reus and Henrikh Mkhitaryan. The star-bolstered visitors duly set to work, locking down the midfield as well as stringing together a few fine passing moves for good measure.
Injury had restricted Reus to just two league appearances so far this season, but the 25-year-old was already looking like something approaching his world-beating best, firing wide from the tightest of angles with ten minutes gone. Mkhitaryan popped up in a far more promising position moments later, but could only find the side netting after combining with the energetic Shinji Kagawa.
Immobile hits back
Köln had barely had a sniff, so it came as even more of a surprise when Peter Stöger's men got their noses in front five minutes before half time. Dortmund's midfield switched off as Marcel Risse outjumped his marker to release Vogt, who pulled away from Sokratis and calmly tucked the ball beyond the reach of onrushing goalkeeper Weidenfeller.
BVB thus went in at the break contemplating a third straight Bundesliga defeat and fifth of the season, but whatever Jürgen Klopp had to say during the interval appeared to have the desired effect. Immobile made the most of a mistake by Mergim Mavraj, exchanged cute passes with Reus and held his nerve to fire Dortmund level with the half not even three minutes old.
Zoller wins it
That setback aside, Köln were seeing far more of the ball in the second half than in the first and almost retook the lead through Zoller. Sokratis flashed a header wide at the other end, before the Billy Goats' adventurous approach - coupled with some kamikaze goalkeeping - allowed Zoller to stick away Yuya Osako's teasing right-wing cross.
Dortmund had won their last eight meetings with Köln, but not even the unrivalled pace of substitute Pierre-Emerick Aubameyang could prevent that hot streak from going under as die Schwarz-Gelben fell to their third successive league defeat of the 2014/15 campaign.
Line-ups and statistics