They had put on an epic show with repeated passes for the lead early on but would drop into the middle of the pack after choosing not to put during the first stage break.
The 50-lap race restarted from a seventh Caution with three to go and van Gisbergen rounded up Ty Gibbs before methodically picking off Jesse Love and cruising to victory.
The win is the Kaulig Racing driver’s third in the Xfinity Series and comes at the scene of his debut NASCAR triumph, just over 12 months ago in the Cup Series.
Gibbs finished second in the end and Larson got back to third, from Parker Kligerman and Love.
Tomorrow, Larson starts the Cup race from pole and van Gisbergen from fifth position.
Van Gisbergen had qualified on pole position for the Xfinity race and put his #97 Chevrolet in the inside lane for the start, with Larson (#17 Hendrick Motorsports Chevrolet) on his outside.
Larson tried a move at Turn 2 and while he was kept at bay then, he made the pass at Turn 4, only for van Gisbergen to go back down the inside at Turn 6.
On Lap 3, Larson tried again, firing down the inside at Turn 4 and managing to hold on to the lead for a sustained period, as Gibbs (#19 Joe Gibbs Racing Toyota) lurked just behind them.
Larson undid his hard work when he ran wide at Turn 12 on Lap 5 and #97 picked him off at the other end of pit straight.
Van Gisbergen had pulled a second clear when a Caution was called on Lap 8 of the 15-lap opening stage due to debris, but the front-runners all stayed out of pit lane.
On the Lap 11 restart, Larson threw Car #17 down the inside at Turn 1 but ran wide on exit.
He decided to go outside at Turn 4, hung there through Turn 5, and finally completed the pass for the lead when the track went back the other way at Turn 6.
However, Larson could not shake Car #97 and when van Gisbergen hung tough at Turn 6 on Lap 15, he had the inside line for Turn 7 and grabbed the lead back.
That settled the stage result, with Gibbs third and AJ Allmendinger (#16 Kaulig Chevrolet) up to sixth from 11th on the grid.
The top two stayed out with Gibbs first of those to pit in the break, dropping outside the top 20.
When the restart came on Lap 19, Larson went under van Gisbergen at Turn 1 while Allmendinger made it three road course heavyweights in the top three by passing Connor Mosack (#88 JR Motorsports Chevrolet).
Van Gisbergen was applying the blowtorch to Larson before Allmendinger slid into the tyre wall at Turn 6 and triggered a Caution on Lap 23.
That prompted the leaders to finally pit and Sammy Smith (#8 JR Motorsports Chevrolet) filtered to the lead, with Larson 17th and van Gisbergen 20th after being jumped by Mosack in the lane.
Austin Hill (#21 Richard Childress Racing Chevrolet) took the lead after the race restarted on Lap 26 and quickly stretched the gap to a full second, as Larson climbed to 12th and van Gisbergen to 15th in one lap.
They were 10th and 11th by the end of Lap 27, before van Gisbergen passed Larson on Lap 29.
Hill won the stage by 1.418s at the end of Lap 30, from Sammy Smith, Love (#2 RCR Chevrolet), Justin Allgaier (#7 JRM Chevrolet), Sheldon Creed (#18 JGR Toyota), Gibbs, Kligerman (#48 Big Machine Racing Chevrolet), Sam Mayer (#1 JRM Chevrolet), John Hunter Nemechek (#20 JGR Toyota), van Gisbergen, and Larson.
Sammy Smith and Allgaier pitted in the break but the rest of the front-runners stayed out, promoting Mosack to 10th and Joey Logano (#15 AM Racing Ford) to 11th.
The green flew at the end of Lap 34 and Love got the jump on his team-mate Hill, who then ceded second to Gibbs at Turn 4.
Van Gisbergen had already threaded his way to sixth but Larson was still stuck in a battle for ninth.
Further back, a concertina at Turn 12 brought about another Caution to recover the #92 DGM Racing Chevrolet of Josh Bilicki.
Love chose inside for the fifth restart, with 11 laps to go, while van Gisbergen was put on the outside of Row 3.
The top four of Love, Gibbs, Hill, and Creed stayed as you were but van Gisbergen rounded up Mayer for fifth.
They could not complete the lap before another Caution came, in response to Preston Pardus (#50 Pardus Racing Inc Chevrolet) being parked on-track, with Larson still ninth.
Love led again at the sixth restart, with eight laps to go, with the next three running three-wide to Turn 1 as van Gisbergen watched on just behind.
When Creed went under Hill at Turn 4, van Gisbergen also pounced on the #21 Chevrolet at Turn 5, then jammed his #97 Chevrolet up the inside of the #18 Toyota for third place at Turn 11.
Van Gisbergen quickly erased the one-second deficit to the top two but then, while right behind Gibbs, got loose at Turn 12 on Lap 44 and nearly spun when hit by Mayer as he caught the slide.
There was another Caution moments later after Leland Honeyman embedded the #42 Young’s Motorsport Chevrolet in the Turn 1 tyre wall due to a flat tyre.
The final restart came with three to go, Love accelerating into the lead again as van Gisbergen swept around Gibbs at Turn 1 and Mayer spun just behind them.
Van Gisbergen went down the inside of Love half a lap later at Turn 7 and Gibbs followed.
Larson got by Kligerman for fourth at Turn 12 and then went past Love for third on Lap 49 at Turn 4, at which point Gibbs was about two seconds up the road.
When they took the chequered flag at the end of Lap 50, van Gisbergen was 1.287s clear, with Gibbs another 0.717s up on Larson.
Kligerman and Love completed the top five, from Mosack, Hill, Logano, Allgaier, and Austin Green (#32 Jordan Anderson Racing Chevrolet).
The Cup Series Race starts tomorrow at 16:30 ET/06:30 AEST.