Rodriguez led a group of Giro favourites over the line in five hours 24 minutes 41 seconds, to claim his second stage victory of this year's race.
Two-time Giro winner Ivan Basso was second, with Ryder Hesjedal third, both with the same time. The Victoria native remains 30 seconds behind Rodriguez in the race for the pink jersey, which the Spaniard will wear for a seventh day on Thursday.
Rodriguez said Hesjedal is now his main rival for the title.
"Now, I think Ryder Hesjedal is the great favourite," the Spaniard said. "Today he was able not to lose any seconds, and if the gaps stay like this, Scarponi, Basso and I won't have any chance against him in the Milan individual time trial. So, we have to attack him and try to make him drop, otherwise he will win this competition for sure."
Defending champion Michele Scarponi struggled with cramps on the descent from the Passo Giau which looked to prove costly, but he rode powerfully to catch up with the group and finished fifth. He moved up to fourth in the standings, 1:36 behind Rodriguez.
Rodriguez dedicated the win to Xavi Tondo, a Spanish cyclist who died a year ago to the day in an accident at his home.
"Today for me was a special day," Rodriguez said. "A year ago, Xavi Tondo, a great friend of mine, died. I knew him not only from our professional career, but since I was a child. So, today I really wanted to win and in the end I did, and obviously it's dedicated to him."
The main contenders were expected to be at the front of Wednesday's stage in the Dolomites, with four tough climbs along the 186-kilometre route from Falzes before the final descent into Cortina d'Ampezzo.
The first break of the day came 44 kilometres in and Branislau Samoilau, Matteo Rabottini, Kevin Seeldraeyers, Jose Serpa and Matteo Montaguti swiftly established a lead of six minutes.
However, the Euskaltel team rode hard at the front of the peloton to cut the advantage, with Liquigas then coming forward to help out after the escapees' lead was cut to just under two minutes.
Mikel Nieve broke clear of the peloton with a third of the stage to go and caught the leaders on the descent of the second major climb of the day — the Passo Duran. The breakaway riders were caught 40 kilometres from the finish.
The tough final climb up the Passo Giau took its toll and Basso, Scarponi, Hesjedal, Rodriguez, Domenico Pozzovivo and Rigoberto Uran pulled ahead on the 10-kilometre climb, which has an average gradient of 9.3 per cent, rising to 14 per cent. Basso once famously likened the Passo Giau to "a slap in the face."
Basso, Pozzovivo, Rodriguez and Hesjedal crested the summit together, with Scarponi and Uran just behind as the group started the 18-kilometre descent.
Scarponi then had to shake off cramps and was 29 seconds back halfway down the descent, but an impressive recovery saw the Lampre cyclist catch the others just over a mile from the finish.
The six riders sprinted to the line and Rodriguez just edged his rivals.
"It was a very hard stage," Rodriguez said. "Every single day is dangerous for us. Today, just like many of the others, I had cramps in my leg, so I don't think we can handle this pace during the next stages."
Roman Kreuziger saw his hopes of a first Grand Tour victory all but evaporate as he struggled up the Passo Giau. The Czech cyclist finished 11:26 behind and has now slipped to 20th in the overall standings, almost 13 minutes behind Rodriguez.
Daryl Impey, Theo Bos, Peter Kennaugh, Gaetan Bille and Thomas Vaitkus withdrew from the race.
Thursday's 18th stage is a mainly flat and descending 149-kilometre route from San Vito di Cadore to Vedelago.
The Giro ends on May 27 in Milan.