Race leader Kristoff, who claimed stage one of his home tour on Wednesday, shaded a sprint finish in driving rain in Skien, having cut across his compatriot at the final turn.
It was a tough day for the riders, with unseasonal cold temperatures accompanying the rain, and the clouds hanging so low that TV coverage was not possible.
Sondre Enger of Team Plussbank was third, completing an all-Norwegian podium.
“It feels great to win again”, Katusha’s Kristoff said afterwards. “But it’s so cold that it’s difficult to enjoy the victory.
“When I came to this race, I said I wanted to win the first three stages, so I have to try again tomorrow to reach my goal but there’ll be a lot of riders eager to beat me.”
He also apologised for his move on Team Sky’s Boasson Hagen.
“My brakes weren’t working in the last corner. I wanted to stay behind Edvald but I couldn’t. It was slippery.”
Boasson Hagen said he held no grudges.
“I don’t want to accuse him of anything,” he said. “We do an outdoor sport with wet and dangerous corners, that’s how it is.”
1 Alexander Kristoff (Nor) Katusha 4:11:12
2 Edvald Boasson Hagen (Nor) Sky Procycling
3 Sondre H Enger (Nor) Team Plussbank
4 Evaldas Siskevicius (Ltu) Sojasun
5 Sven Vandousselaere (Bel) Topsport Vlaanderen-Baloise
6 Marko Kump (Slo) Team Saxo-Tinkoff
7 Tom Van Asbroeck (Bel) Topsport Vlaanderen-Baloise
8 Andreas Stauff (Ger) MTN-Qhubeka
9 Matteo Pelucchi (Ita) IAM Cycling
10 Frederique Robert (Bel) Lotto Belisol
11 Ben Swift (GBr) Sky Procycling
12 Eduardo Sepulveda (Arg) Bretagne-Seche Environnement
13 Kristian Dyrnes (Nor) Team Oster Hus-Ridley
14 Sébastien Hinault (Fra) IAM Cycling
15 Jean-Pierre Drucker (Lux) Accent Jobs-Wanty
16 Andre Fernando S. Martins Cardoso (Por) Caja Rural-Seguros RGA
17 Vegard Robinson Bugge (Nor) Joker-Merida
18 Fridtjof Røinås (Nor) Team Plussbank
19 Bob Schoonbroodt (Ned) Cyclingteam De Rijke-Shanks
20 Bauke Mollema (Ned) Blanco Pro Cycling Team