It was Evans' second victory of the season and he now has a 2pt series lead over Vainio. Evans will start Sunday's 'reverse top eight grid' race from the fourth row of the 24 car grid.
"It wasn't easy," said Evans at the post race media conference. "Myself and Aaro were going pretty hard so it was a really close race. If I had made one mistake he would have been right on me. It was like that for most of the race and then I was fortunate enough to pull a bit of a gap as he made a small mistake. From then on, I just pinned my ears back and tried to go for fastest lap."
Evans said he wasn't expecting to regain the series lead in Spain unless Vainio had a bad weekend. "I am really happy to have done pole, win and set the fastest lap. We will keep pushing on, we now focus on tomorrow's race and see if we can improve. Hopefully we'll come away with another good result."
He said the reverse grid Sunday race would be challenging.
"It is possible to pass around here. Last year I started sixth and finished fourth as there was a lot of passing going on. I think we are all close and around the same speed so it might be difficult to move forward dramatically.
"I will do my best but for me it's just about pushing to get as close to the front as possible and picking up a strong result."
Evans's team-mate David Fumanelli lost his front-row starting position going into the first corner as Vainio slipped ahead. Tio Ellinas then pushed Fumanelli down to fourth at the second corner.
Fumanelli eventually fought back with a textbook switchback overtaking move on Ellinas at Turn 12 on lap 13 to secure the final place on the podium, but was over 10s in arrears of the leaders at the finish.
The third MW Arden car of Mathias Laine finished fifth, after pulling away from a huge battle between Daniel Abt and Kevin Ceccon that was narrowly decided in Abt's favour.
Lotus driver Conor Daly, who was belatedly stung with a 10-place grid penalty at Valencia following his Monaco crash three weeks ago, jumped the start but battled back from a drive-through penalty to finish 11th.
Patric Niederhauser will start Sunday's reversed-grid race from pole, as he finished eighth after winning a fierce battle with Carlin's Will Buller.