Orica-Scott were nowhere to be seen for much of the final five kilometres, but Ewan was brought to the front at the perfect time thanks to hard work by Luka Mezgec with 800m to go.
The Slovenian rider set a searing pace for a few hundred metres, before Ewan jumped out of his wheel, accelerating away from Van Poppel and Sagan, the latter holding on to his yellow jersey and extending his overall lead courtesy of bonus seconds on the line.
By far the longest stage in this year’s Tour of Poland, the 238km stage from Zawiercie to Zabrze saw six brave riders get in the break: Remi Cavagna (Quick-Step Floors), Bert-Jan Lindeman (LottoNL-Jumbo), Tom Skujins (Cannondale-Drapac), Nick Dougall (Dimension Data), Jan Tratnik (CCC Sprandi Polkowice) and Pawel Bernas (Poland).
They enjoyed a maximum lead of around six minutes as they made their way along the rolling roads that characterised much of the stage, with the gap starting to drop with around 100km to go.
The break’s lead steadily came down, before it really started to tumble in the final 30km. With 15km remaining the gap fell below a minute for the first time, even as Cavagna set off on a brave but futile solo effort.
The pace really started to ram up with two kilometres to go as Team Sky moved to the front, Diego Rosa working hard in the service of Danny Van Poppel.
Van Poppel was positioned in second wheel with 800m to go, but was passed by Luka Mezgec with Caleb Ewan locked in his wheel.
With 250m to go Ewan popped out of the wheel, holding off Sagan and the fast-approaching Van Poppel to take his first win since the Giro d’Italia, while Sagan held on to the overall lead, picking up bonus seconds in the process.
Tour of Poland 2017, stage four: Zawiercie to Zabrze, 238km
1. Caleb Ewan (Aus) Orica-Scott, in 5-38-49
2. Danny Van Poppel (Ned) Team Sky
3. Peter Sagan (Svk) Bora-Hansgrohe
4. Boy van Poppel (Ned) Trek-Segafredo
5. Sacha Modolo (Ita) UAE Team Emirates
6. Lorenzo Manzin (Fra) FDJ
7. Tom Van Asbroeck (Bel) Cannondale-Drapac
8. Enrico Battaglin (Ita) LottoNl-Jumbo
9. Alan Banaszek (Pol) CCC Sprandi Polkowice
10. Roberto Ferrari (Ita) UAE Team Emirates, all at same time
General classification after stage four
1. Peter Sagan (Svk) Bora-Hansgrohe, in 15-41-47
2. Dylan Teuns (Bel) BMC Racing, at 10 secs
3. Rafal Majka (Pol) Bora-Hansgrohe, at 16 secs
4. Wilco Kelderman (Ned) Team Sunweb, at 20 secs
5. Tom-Jelte Slagter (Ned) Cannondale-Drapac, at 25 secs
6. Domenico Pozzovivo (Ita) Ag2r La Mondiale, at 28 secs
7. Wout Poels (Ned) Team Sky, at 29 secs
8. Adam Yates (GBr) Orica-Scott, at 29 secs
9. Nathan Haas (Aus) Dimension Data, at 34 secs
10. Sam Oomen (Ned) Team Sunweb, at 34 secs