Dumoulin (Giant-Alpecin) won the 38.4km time trial stage held in Berne but Spilak (Katusha) overhauled Geraint Thomas (Sky) and Thibaut Pinot (FDJ.fr) to win by just five seconds overall.
Spilak finished 18 seconds behind Dumoulin, with time trial great Fabian Cancellara (Trak Factory Raciing) having to settle for third at 19 seconds. Thomas took fifth on the stage but 18 seconds behind Spilak having begun the day 13 seconds ahead.
"This was a main objective in the season and I was very motivated, so to get this victory is incredible," Spilak said. "After a lot of second and third places, finally I have managed to win again a big race. Of course this is the biggest victory in my career.
"This week was a hard one, but I felt good and strong and the team provided great support for me. I want to thank all of the guys, staff, management and sponsors for everything they did to make this win possible.
"Yesterday I could see the circuit and I realized it suited me well. It was really hard but I like the races like this. So I was motivated and concentrated in the morning before the start.
"In the race I did my best and it worked out well for me. It was a very intense part of the season so now I will take some rest. And I am happy to go home with such a great trophy. In two days I have my birthday. What a great present I have."
Cancellara set the early benchmark crossing the finishing line in 48min 55sec. Neither the Italian national champion Adriano Malori (Movistar) nor the former hour record holder Matthias Brändle (IAM) could match Cancellara’s time.
Dumoulin set the fastest time after the split at 21km. However, it didn’t take long before Spilak took many by surprise by bettering that effort. Meanwhile, Thomas had already overtaken Pinot on the general classification and had only to keep Spilak in check in order to win.
In the hot seat for the majority of the stage, Cancellara saw his time beaten by Dumoulin who crossed the line in 48min 36sec.
Only Spilak could prevent Dumoulin from taking his second time trial win in this year’s Tour de Suisse. The Katusha rider fell just short but had done enough to slip on the yellow jersey.
Stage 8: 38.4km, Berne
1 Tom Dumoulin (NED) Giant-Alpecin 48min 37sec
2 Simon Spilak (SLO) Katusha 0:00:18
3 Fabian Cancellara (SUI) Trek Factory Racing 0:00:19
4 Adriano Malori (ITA) Movistar 0:00:34
5 Geraint Thomas (GBR) Sky 0:00:36
6 Bob Jungels (LUX) Trek Factory Racing 0:00:41
7 Jerome Coppel (FRA) IAM 0:00:44
8 Cameron Meyer (AUS) Orica-GreenEDGE 0:01:07
9 Rafal Majka (POL) Tinkoff-Saxo 0:01:26
10 Robert Gesink (NED) LottoNL-Jumbo 0:01:32
1 Simon Spilak (SLO) Katusha 30hr 15min 9sec
2 Geraint Thomas (GBR) Sky 0:00:05
3 Tom Dumoulin (NED) Giant-Alpecin 0:00:19
4 Thibaut Pinot (FRA) FDJ.fr 0:00:45
5 Domenico Pozzovivo (ITA) AG2R 0:02:21
6 Bob Jungels (LUX) Trek Factory Racing 0:02:58
7 Miguel Angel Lopez (COL) Astana 0:03:06
8 Steve Morabito (SUI) FDJ.fr 0:03:17
9 Robert Gesink (NED) LottoNL-Jumbo 0:03:19
10 Rafal Majka (POL) Tinkoff-Saxo 0:03:20