Whincup, who started in pole position, held a clear lead early in the race, but after van Gisbergen was able to work back toward the front he looked to challenge Whincup at the front of the pack.
Shadowing him through the opening laps before the lead changed hands as the pair underwent their pit stops, van Gisbergen remained hot on the wheels of Whincup with 30 laps to go.
With 23 laps to go, both drivers had pitted twice, setting up a 23-lap sprint to find a winner.
While Whincup had held the advantage throughout the race, van Gisbergen found the lead with 13 laps to go, and raced on to win by almost three seconds.
"That's a pretty awesome number," van Gisbergen said of claiming his 50th race win in his career.
"Our cars were fantastic. Another subpar start from me and then I had to pay for it all race, but I feel a lot better. I paced myself, was a lot smoother and it's just awesome to get another 300-pointer."
With the win, van Gisbergen moves 245 points clear of Whincup at the top of the standings.