Nibali was aggressive all day, getting into groups off the front of the peloton before leading an elite quintet into a commanding lead before attacking on the final climb.
Costa surged back to deny Nibali the stage win – pointing to the rainbow bands on his cuff as he crossed the finish line – but with Tejay van Garderen (BMC Racing) more than two minutes back the Italian took the consolation of the race lead.
Great Britain’s Simon Yates (Orica-GreenEDGE), meanwhile, finished fifth on the day after a fiercely-strong counter-attack to move into the white jersey of best young rider, while Team Sky’s Chris Froome was ninth.
Attacks were plentiful from the start, with British duo Adam Yates (Orica-GreenEDGE) and Steve Cummings (MTN-Qhubeka) among a group of nine to eventually earn a gap.
They were reeled in and soon joined by several dangerous riders, however, including Nibali, Costa, stage five winner Romain Bardet (Ag2r-La Mondiale) and race leader van Garderen.
The GC men sat up as Team Sky – who had missed the 19-man move – led the chase, but it wasn’t long before the race came back together at the front.
Next to attack was Tony Martin (Etixx-QuickStep), and at the second attempt Der Panzerwagen went clear with Nibali, Costa, Alejandro Valverde (Movistar) and Tony Gallopin (Lotto-Soudal).
The front group repeatedly attacked each other, but as a result of their pace the gap extended to more than three minutes, with BMC Racing chasing.
Nibali put in a number of digs on the front, eventually distancing Martin, with the Italian’s pace enough stretching the quintet’s lead to more than three minutes.
Further back, the chasing group suffered from a lack of collaboration as Yates and later Dan Martin (Cannondale-Garmin) attacked off the front.
Movistar played the role of spoilers, disrupting the chase, while Bardet crashed heavily on a wet descent to further disrupt proceedings.
With less than four kilometres remaining, Gallopin attacked the front group as Costa, Nibali and Valverde – the same trio who attacked together behind Rodriguez at the World Championships in 2013 – urged each other to start chasing.
Gallopin still led as they hit the final climb, but after some careful watching of each other Nibali attacked, dropping the other two and quickly bridging to and passing Gallopin.
It looked as though the Italian would be too good, but Costa came back strong – dropping Nibali on the final straight and reminding his rival of who triumphed at those aforementioned Worlds as he crossed the finishing line.
Nibali, however, will wear the yellow jersey with two mountain stages to come, boasting an overall lead of 29 seconds ahead of Costa.
Criterium du Dauphine 2015: stage six – result
1) Rui Costa (POR) – Lampre-Merida – 4.29.23hrs
2) Vincenzo Nibali (ITA) – Astana +5”
3) Alejandro Valverde (ESP) – Movistar +38”
4) Tony Gallopin (FRA) – Lotto-Soudal +39”
5) Simon Yates (GBR) – Orica-GreenEDGE +1.24
6) Dan Martin (IRL) – Cannondale-Garmin +1.46
7) John Gadret (FRA) – Movistar +1.48
8) Tiejs Benoot (BEL) – Lotto-Soudal +1.59
9) Chris Froome (GBR) – Team Sky +2.12
10) Benat Intxausti (ESP) – Movistar – ST
1) Vincenzo Nibali (ITA) – Astana – 22.34.17hrs
2) Rui Costa (POR) – Lampre-Merida +29”
3) Alejandro Valverde (ESP) – Movistar +30”
4) Simon Yates (GBR) – Orica-GreenEDGE +35”
5) Tejay van Garderen (USA) – BMC Racing +42”
6) Benat Intxausti (ESP) – Movistar +57”
7) Chris Froome (GBR) – Team Sky +1.21
8) Tony Gallopin (FRA) – Lotto-Soudal +1.29
9) Dan Martin (IRL) – Cannondale-Garmin +1.30
10) Andrew Talansky (USA) – Cannondale-Garmin +2.07