Approximately 14km in, a break of six riders formed and created a 39-second gap from the bunch.
About 20km further, another two riders joined the break at the head of affairs. The eight-man breakaway comprised David Maree, Downes, Girdlestone, Myles van Musschenbroek, Bradley Potgieter, Damon Fouchee, Barry Crouch and Josh van Wyk.
The break held a 1:15 gap, before Jayde Julius joined the group and Fouchee, Crouch and Potgieter fell back.
The breakaway held a steady lead until the 71km mark, which is when Downes took a solo lead of 51 seconds.
Downes managed to stay away until the end and narrowly beat Van Heerden to the line. Girdlestone, who believed before the race that Daryl Impey would stand in his way of victory, got home in third.
Provisional results below
1. Brandon Downes (BCX) 2:15:26
2. Steven van Heerden (BCX) 2:15:28
3. Dylan Girdlestone (officeguru racing) 2:15:30
4. Nolan Hoffman (BCX) 2:15:31
5. Tyler Day (Barzani Pro) 2:15:41
6. Jayde Julius (ProTouch)
7. Alexander Worsdale (officeguru racing) 2:15:42
8. Reynard Butler (ProTouch) 2:15:43
9. Rohan du Plooy (Alfa Bodyworks-Giant)
10. Daryl Impey (Mitchelton-Scott)
11. Bradley Potgieter (Vandergroup) 2:16:03
12. David Maree (BCX) 2:16:08
13. Jean-Pierre Lloyd (officeguru racing)
14. Ryan Harris (officeguru racing)
15. Travis Barrett (officeguru racing)
16. Damon Fouchee (Vandergroup) 2:16:09
17. Esias Joubert (Infinita)
18. James Fourie (ProTouch) 2:16:10
19. Richard Damant
20. Tiano Da Silva (ProTouch) 2:16:12