The stage looked to be Rafal Majka’s (Tinkoff) to lose, leading on his own on the final climb, but a great descent saw Pantano get back into contention and win it on the line.
Dumoulin tried an early attack, going up the road with 70km to go and was chased down by Nibali, Pantano and Domenico Pozzovivo (Ag2r La Mondiale).
The group of four was soon caught by a splintered breakaway, with Dumoulin and Nibali unable to keep up with the renewed pace.
Majka and Ilnur Zakarin (Katusha) sped off up the Grand Colombier, with the Polish champion taking the King of the Mountains points at the top, chased hard by Julian Alaphilippe (Etixx-Quick Step).
Pantano also joined the Frenchman in bridging the gap and Alaphilippe zoomed off the front on the long descent from the stage’s highest point.
But the former white jersey holder had a mechanical problem on the descent while holding a significant lead over Majka and Pantano, virtually ending his chances of a stage win.
Astana came to the front of the peloton for the first time in a while up the Grand Colombier in an attempt to increase the pace.
Aru attacked off the front on the Lacets du Grand Colombier, but as soon as Alejandro Valverde (Movistar) went to join him it was enough for Sky to bring them both back and take control once more.
Up front, meanwhile, Majka lead on his own up the Lacets and raced towards the stage win as Romain Bardet (Ag2r) attacked Froome five minutes back down the road.
Reichenbach remained in the second group on the road, looking for a significant boost to his GC hopes, sitting just 11 minutes back at the start of the day.
Pantano’s daredevil descending saw him get back up with Majka, with Reichenbach and Alexis Vuillermoz (Ag2r) just 30 seconds back at the foot of the descent.
Movistar came to the front of the peloton on the flat roads towards the finish, but it was too little, too late for the Spanish team in this occasion.
Majka started the games of cat and mouse up front with Pantano before starting his sprint first. But the Colombian bided his time and took the shorter line to the finish to beat the Pole to the stage win.
Majka will be disappointed not to seal the stage win, but he does go into the lead in the mountains classification.
Froome and co crossed the line together to keep the battle going into Switzerland and then back down into the Alps next weekend.
Monday’s stage sees a rolling trip into Switzerland, with the race finishing in Fabian Cancellara’s home town of Bern ahead of the second rest day.
Tour de France 2016, stage 15: Bourg-en-Bresse to Culoz, 160km
1. Jarlinson Pantano (Col) IAM Cycling in 4-24-49
2. Rafal Majka (Pol) Tinkoff at same time
3. Alexis Vuillermoz (Fra) Ag2r La Mondiale at 6 secs
4. Sebastien Reichenbach (Sui) FDJ at same time
5. Julian Alaphilippe (Fra) Etixx-QuickStep at 22 secs
6. Serge Pauwels (Bel) Dimension Data at 25 secs
7. Pierre Rolland (Fra) Cannondale-Drapac at same time
8. Ilnur Zakarin (Rus) Katusha at 1-30
9. Daniel Navarro (Esp) Cofidis at same time
10. Tom-Jelte Slagter (Ned) Cannondale-Drapac at 2-08
14. Chris Froome (GBr) Team Sky at 3-07
15. Nairo Quintana (Col) Movistar, st
General classification after stage 15
1. Chris Froome (GBr) Team Sky in 68-14-36
2. Bauke Mollema (Ned) Trek-Segafredo at 1-47
3. Adam Yates (GBr) Orica-BikeExchange at 2-45
4. Nairo Quintana (Col) Movistar at 2-59
5. Alejandro Valverde (Esp) Movistar at 3-17
6. Romain Bardet (Fra) Ag2r La Mondiale at 4-04
7. Richie Porte (Aus) BMC Racing at 4-27
8. Tejay van Garderen (USA) BMC Racing at 4-47
9. Daniel Martin (Irl) Etixx-QuickStep at 5-03
10. Fabio Aru (Ita) Astana at 5-16