The Tinkoff world champion survived a coming together with Arnaud Démare (FDJ) in the final 100m to edge Andre Greipel on the line in St-Pieters-Leeuw.
The bonus seconds see Sagan move seven seconds ahead of Dennis ahead of Friday’s team time trial.
Astana pair Andrei Grivko and Dmitriy Gruzdev put the peloton to the sword for the best part of the final 35km, riding solo at the head of the field in search of both the stage win and vital bonus seconds during the golden kilometre.
Grivko and Gruzdev were finally caught with three kilometres to go, with Jasper Stuyven (Trek-Segafredo) trying to replicate his Kuurne-Brussels-Kuurne win with a late solo escape.
It wasn’t to be again as Team Sky and Lotto-Soudal dragged him back as the sprint trains started to form. Michael Matthews (Orica-BikeExchange) came off worse in a clash of wheels with two kilometres left, but was the only big name sprinter to go down.
John Degenkolb (Giant-Alpecin) tried his luck from a long way out, sprinting out the saddle but from far too long, with the likes of Sagan, Greipel, Démare and Alexander Kristoff passing him.
Sagan clashed shoulders with Démare as the pair battled for position on the road behind Kristoff, who opened up the sprint for the line.
Démare fell back a few metres and Greipel took advantage of the Frenchman’s slowing down to speed past. Greipel took to Sagan’s inside to challenge him on the line and missed out on his first win of the week by a matter of millimetres.
Stage five sees riders compete in a 21km team time trial, which chould see Dennis regain his advantage, with BMC looking to hit form ahead of their World Championships TTT defence.
Eneco Tour stage four, Aalter – St-Pieters-Leeuw (202km)
1. Peter Sagan (Svk) Tinkoff, 4-42-12
2. Andre Greipel (Ger) Lotto-Soudal
3. Alexander Kristoff (Nor) Katusha
4. Arnaud Démare (Fra) FDJ
5. Dylan Groenewegen (Ned) LottoNL-Jumbo
6. John Degenkolb (Ger) Giant-Alpecin
7. Reinardt Janse van Rensburg (RSA) Dimension Data
8. Amaury Capiot (Bel) Topsport Vlaanderen
9. Giacomo Nizzolo (Ita) Trek-Segafredo
10. Luka Mezgec (Slo) Orica-BikeExchange
Overall standings after stage four
1. Peter Sagan (Svk) Tinkoff, 13-17-29
2. Rohan Dennis (Aus) BMC, at 7s
3. Jos van Emden (Ned) LottoNL-Jumbo, at 12s
4. Jasha Sutterlin (Ger) Movistar, at 21s
5. Martin Elmiger (Sui) IAM Cycling, st
6. Primoz Roglic (Slo) LottoNL-Jumbo, at 23s
7. Taylor Phinney (USA) BMC, st
8. Tony Martin (Ger) Etixx-Quick Step, at 25s
9. Niki Terpstra (Ned) Etixx-Quick Step, at 28s
10. Andre Greipel (Ger) Lotto-Soudal, st