The Katusha climber attacked on the final steep ramp in a thrilling finale to the undulating 186km stage 10 from Civitavecchia to take his first ever career win in the Giro.
Poland's Bartosz Huzarski (NetApp) crossed the line two seconds back to take second place ahead of Italian Giovanni Visconti (Movistar).
Domenico Pozzovivo (Colnago), the diminutive Italian who won Sunday's stage eight, led a group of race favourites over the line another four seconds back to take fourth place ahead of France's John Gadret (AG2R).
Rodriguez moves into the race lead after picking up the vital bonus seconds for the stage win, with former maglia rosa Ryder Hesjedal (Garmin-Barracuda) now 17 seconds behind in second place.
Canadian Hesjedal finished the stage in sixth place ahead of Dutch youngster Tom Jelte Slagter (Rabobank) and Italian Dario Cataldo (Omega Pharma-Quick Step).
"It was important for me to do my best here for the stage win but also for the time bonus," Rodriguez told reporters after a vintage performance at the UNESCO World Heritage Site. "You have to take every advantage you can on a finish like this."
Played out under sunny skies in central Italy, Tuesday's stage left the west coast of Lazio before heading north-east towards the Apennine Mountains.
After 13km a break of five riders - Guillaume Bonnafond (AG2R), Francesco Failli (Farnese Vini), Matthias Brandle (NetApp), Martijn Keizer (Vacansoleil-DCM) and Miguel Minguez (Euskaltel) - jumped clear of the peloton.
With the Katusha team of Rodriguez controlling the peloton, the quintet built up a maximum lead of four minutes and 50 seconds before being gradually reeled in.
Dutchman Stef Clement (Rabobank) broke clear of the pack on an uncategorised climb 32km from the finish to join the leaders, who staved off the inevitable until they were caught inside the final 8km.
With a fierce pace seeing the world champion Mark Cavendish (Team Sky) blown off the back on the western flank of Monte Subasio, both Slagter and Pozzovivo put in a series of attacks on the 15% penultimate rise into Assisi before Colombian Rigoberto Uran (Team Sky) and Gadret opened up a small gap on a desent into the old town.
Uran and Gadret were caught as the leaders passed the famous Basilica of San Francesco and under the narrow Porta San Francesco archway that marked one kilometre to go.
After an expert launch from team-mate and compatriot Daniel Moreno, Rodriguez made his move, countering an attack by Slagter and Astana’s Paolo Tiralongo, winner of Saturday’s stage seven.
The 32-year-old Spaniard powered over the pretty paving stones of Assisi inside the final 200km to take the win – and bonus seconds – that everyone expected of him.
Rodriguez will start Wednesday's long 255km stage 11 with a lead of 17 seconds over Hesjedal, with Italian Tiralongo in third, 32 seconds in arrears.
Czech Roman Kreuziger (Astana) and Spaniard Benat Intxausti (Movistar) complete the top five, both 52 seconds behind the new maglia rosa.