Second-half goals by Spanish midfielder Jose Manuel Jurado and defender Benedikt Hoewdes gave Schalke only their fourth win of the season and left Bayern lagging in seventh place.
Bayern chairman Karl-Heinz Rummenigge has set coach Louis van Gaal the task of taking 10 points from their last four league games before Christmas and Bayern must now beat St Pauli and Stuttgart over the next two weekends to meet that target.
“It is unbelievable,” fumed van Gaal, with his side set to play Basel in the Champions League on Wednesday.
“If we are going to miss so many chances, then we have to expect to concede the first goal. I can’t score the goals myself. It is simply unbelievable when you look at the whole game.
“The most important thing is to score goals, as we saw again today.”
Schalke’s Germany goalkeeper Manuel Neuer kept his side in the game with some outstanding first-half saves as Munich went close through Mario Gomez and Franck Ribery.
But the opening goal came after 57 minutes when a long ball from Neuer was picked up by Spain veteran Raul who had his shot saved only for compatriot Jurado to fire the hosts into the lead.
Raul turned Bayern centre-back Breno for the first goal and Bayern’s Brazilian defender was at fault for the second goal when Hoewedes was left unmarked in the middle of the penalty area.
His 67th-minute header warmed the home fans amidst sub-zero temperatures in Gelsenkirchen.
The win leaves Schalke 15th, with Bayern seventh, while Dortmund have the chance to open a 10-point lead at the top when they tackle Nuremberg on Sunday.
Earlier, Real Madrid target Edin Dzeko fired a second-half penalty over the bar as Steve McClaren’s Wolfsburg was held to a goalless draw at home by Werder Bremen.
The striker is believed to be a Real target to replace the injured Gonzalo Higuain in the winter transfer window with German daily Bild claiming Madrid is ready to table €25 million for the Bosnian.
But the 24-year-old, who has scored nine league goals this season, fired his penalty over the bar on 77 minutes just minutes after Bremen captain Torsten Frings had also missed a spot-kick with Wolfsburg goalkeeper Diego Benaglio making the save.
The result leaves Bremen 10th and Wolfsburg 13th after they suffered their fourth-straight league draw.
“We are incredibly disappointed,” said McClaren, the first Englishman to coach in the Bundesliga and the ex-England coach.
“The first half was good; we controlled the game and played some good football.
“We are all in the same boat, but the season is not over yet. Now we must try to win our last two games before the winter break.”
Second-placed Mainz blew their chance to close the gap at the top.
They suffered their fourth defeat in their last six games when they were beaten 2-1 by Eintracht Frankfurt.
The league’s top scorer Theofanis Gekas netted a penalty in the 84th minute, his 13th of the season.
Hanover are third after they won 2-1 at bottom side Borussia Mönchengladbach, who were reduced to 10 men after Argentina’s Raul Bobadilla was sent off at the end of the first-half for kicking an opponent.
A bizarre goal by Freiburg’s Papiss Cisse after just three minutes sealed his side’s 1-0 win over Hamburg as the Senegal striker scored his 11th goal of the season when he hit both posts before finally stabbing the ball home.
VfB Stuttgart was held to a 1-1 draw by 10 man Hoffenheim.