Vuillermoz led a five-man breakaway to the line in Brives-Charensac, with Anders Skaarseth (Uno-X) finishing second and Olivier le Gac (Groupama-FDJ) in third.
Stage one-winner Wout van Aert (Jumbo-Visma) led Ethan Hayter (Ineos Grenadiers) and the peloton in the sprint, though it was not enough to retain the leader's jersey.
"It's a nice surprise to have the yellow jersey," Vuillermoz said after the race.
"It's really a double present today. Tuesday is a hard stage and I will feel the efforts of today in my legs.
"I will fight to defend because the yellow jersey always gives you extra strength."
The TotalEnergies rider was among six men to make their move early in the 169.8-kilometre stage, leading by as many as five minutes before the peloton began their chase.
Skaarseth, Le Gac and Vuillermoz were joined by Kevin Vermaerke (Team DSM), Anthony Delaplace (Arkéa-Samsic), and Xandres Vervloesem (Lotto Soudal) in the breakaway, though the latter later lost ground in the Col de Mézilhac.
Despite the best efforts of several teams back in the peloton, with 30 kilometres to go, it appeared the stage would be decided between the five remaining riders.
Le Gac was the first to make his move with 300 metres to the line but faded just as the finish approached, leaving Vuillermoz both enough room and time to come around and hold off a persistent Skaarseth.
"It is great to win again after the crash I had last year," Vuillermoz added.
"The goal wasn't actually to be in the break tomorrow, but once we were in the move, everyone committed to the line. It's a great victory."
The Critérium du Dauphiné continues tonight on SBS and SBS On Demand with coverage of the third stage commencing at 11pm (AEST).