Frenchman Mikael Cherel, of AG2R, was second after nearly being squeezed into the barriers in the run to the finish line, where he was followed by HTC-Highroad's Tony Martin of Germany.
Team Katusha's Russian contender Pavel Brutt retained the race leader's yellow jersey with a 32 second lead on Kazakh Vinokourov, who edged ahead of race rival Damiano Cunego.
Following the pattern of the previous stages, four riders broke away early in the race only to be reeled in during the final climb, splitting the main peloton.
Cherel was furious after coming over the finish, his bid being scuppered by Vinokourov as the Kazakh powered through to the line, dashing the Frenchman and Martin's bid to beat the sprinters with a breakaway three kilometres out.
"Cherel took the risk of going to the left, he could have gone elsewhere, the road was wide," Vinokourov said afterwards, confirming his intention to claim the overall victory.
"It's my first Tour of Romandie I like the race, winning it would be the icing on the cake. If I have good legs tomorrow, I'll have to try hard but Tony Martin doesn't look bad," he added.
Martin has finished runner-up to world time trial champion Fabian Cancellara of Switzerland on several occasions, and will be the man to beat in Saturday's 20.1km time trial between Aubonne and Signal de Bougy.
The race concludes on Sunday with a traditional flat stage into Geneva.
Results of the Tour de Romandie third stage, a 166.1km run between Thierrens and Neuchatel in western Switzerland, on Friday:
1. Alexandre Vinokourov (KAZ) Astana 3hr 47min 55sec
2. Mikael Cherel (FRA) same time.
3. Tony Martin (GER) s.t.
4. Ben Swift (GBR) s.t.
5. Oscar Freire (ESP) s.t.
6. Davide Vigano (ITA) s.t.
7. Geoffroy Lequatre (FRA) s.t.
8. Alan Perez (ESP) s.t.
9. Manuele Mori s.t.
10. Rob Ruygh (NED) s.t.
Overall standings
1. Pavel Brutt (RUS) Katusha 12hr 31min 34sec
2. Alexandre Vinokourov (KAZ) at 32 sec
3. Damiano Cunego (ITA) 38
4. Cadel Evans (AUS) 42
5. Gorka Verdugo (ESP) 46
6. Steve Morabito (SUI) 50
7. Benat Intxausti (ESP) 51
8. Olivier Zaugg (SUI) s.t.
9. Pieter Weening (NED) s.t.
10. Thomas Rohregger (AUT) 52
Selected:
19. Denis Menchov (RUS) 1:03
21. Tony Martin (GER) 1:18
22. David Millar (GBR) 1:20
32. Ivan Basso (ITA) 2:24