Thomas Voeckler (Bbox Bouygues Telecom), resplendent in the French national champion's jersey, won the 187.5-kilometre stage from Pamiers to Bagneres-de-Luchon, but in a highly-eventful Tour there was yet another twist.
Schleck (Team Saxo Bank) lost around 40 seconds when his chain slipped as he attempted to attack on the 19.3km Port de Bales hors categorie (beyond category) climb and he finished 39 seconds behind Contador (Astana) to fall back into second place overall with five days of racing remaining.
"My stomach is full of anger," said Schleck, who now sits eight seconds behind the two-time champion, having begun the day with a 31-second lead.
"The race is not finished and I want to take my revenge.
"I can end it like a champion."
Two climbs of the fabled Col du Tourmalet come in the next two race days - on tomorrow's 16th stage from Bagneres-de-Luchon to Pau and Thursday's 17th stage, which finishes at the summit of the 18.6km climb.
But Schleck is now chasing Contador, who is seeking a third Tour title in four years in Paris on Sunday.
With 3km to the summit of the Port de Bales, Schleck attacked.
Moments later he was undone by his chain slipping.
Contador went ahead, passing a stationary Schleck and reaching the top of the climb 27 seconds ahead of the yellow jersey incumbent.
The summit came 21.5km before a steep descent to the finish and Contador extended his advantage in the closing kilometres and finished two minutes 50 seconds behind Voeckler - but crucially 39 seconds ahead of Schleck.
Alessandro Ballan (BMC Racing) was second to Voeckler - the fifth French stage winner of the Tour so far - finishing 1min 20secs behind alongside Aitor Perez Arrieta (Footon Servetto).
Contador was one of eight riders to finish in the third group, while Schleck finished 3:29 behind Voeckler.
Schleck was not impressed.
The 25-year-old, who will on Tuesday wear the white jersey for best young rider, was among a swathe of riders who crashed on the second stage from Brussels to Spa, when the peloton controversially waited.
He added: "These guys waited in Spa when I crashed, so that was fair.
"Today is a different story.
"I would not have raced like that and taken advantage of that situation.
"For sure these guys don't get the fair play prize."
In Spa, Fabian Cancellara, then in possession of the yellow jersey, organised for the peloton to wait in as his Team Saxo Bank leaders Andy and Frank Schleck - now out of the race after injuring his shoulder on stage three - crashed on a day when many riders struggled in slippery conditions.
Contador - against usual convention when another rider is afflicted with a mechanical problem - today rode on.
Schleck said he confronted Contador behind the podium following the presentation of the jerseys.
He said: "I asked him in there, how can you do that?"
Contador, who won the Tour in 2007 and 2009, insists he was not aware of Schleck's predicament.
After his Astana team-mate Alexandre Vinokourov had rounded Schleck on the right, Contador passed on the left and accelerated away.
Schleck then had to attend to his chain, delaying him before he could build momentum on the incline and attempt to respond.
Contador was booed on the podium as he received the fabled maillot jaune - a prize he is aiming to keep until Paris.
The 27-year-old said: "We stopped in Spa when he had a bad crash - today it was something different.
"I understand that he is disappointed for what happened today, but when that happened I was on the attack.
"At the moment I attacked the situation was very close, very tight.
"I attacked before I knew he had problems with his chain and I was already ahead.
"It was not possible to do what we did in Spa and stop the race."
Contador attempted to play down the time gained on his rival but was nonetheless pleased to take the yellow jersey.
"Thirty seconds at this point won't change if you win the Tour de France or not," he said.
"What is important is that I gained time today.
"For me it doesn't change anything - the goal is still Paris and I will keep focused on the race.
"It's always a pleasure to have the yellow jersey and it's also very important to take time from my rivals."
Samuel Sanchez (Euskaltel-Euskadi), the third-placed rider overall, finished on the same time as Contador today and now sits 1:52 behind Schleck.
Voeckler, who won stage five of the 2009 Tour and in 2004 wore the yellow jersey for 10 days, was thrilled with his win.
He said: "I am very proud of what I have done.
"At an emotional level, what happened at the championships of France, when I came home first, was already enormous.
"But then to win a stage of the Tour de France with the tricolor on my shoulders is extraordinary."
Lance Armstrong (Team RadioShack), who was third in the 2009 Tour, was 23rd today, 4:08 behind and now sits 31st overall, more than 40 minutes behind.