Dortmund sits third on the table after the upset defeat, four points behind Bayern Munich, which got back to winning ways with a 3-1 win at Stuttgart.
Cologne ended an 18-match winless run, an indication of how big an upset this was.
Tunisia midfielder Ellyes Skhiri tapped in both Cologne goals from corners by ex-Dortmund winger Marius Wolf after being left unmarked.
With Dortmund 2-0 down on 60 minutes, coach Lucien Favre brought on three forwards, 16-year-old sensation Youssoufa Moukoko, American Giovanni Reyna and Belgium's Thorgan Hazard.
Reyna, 18, set up Hazard to pull a goal back, but it was too little, too late.
After scoring six goals in his previous two games, Dortmund striker Erling Braut Haaland was held in check, squandering a golden chance to equalise just before the whistle.
Cologne held on for its first win in Dortmund since 1991.
"Cologne was very well organised and we weren't patient enough," Dortmund boss Favre mused after the game.
"We needed a bit more tempo and there wasn't enough movement."