With three of 125 laps remaining, Elliott caught Larson to take the lead only to see Larson grab it back on the final lap and hang on for the stage victory Saturday night.
Martin Truex Jr. finished third, Kevin Harvick was fourth and Matt DiBenedetto rounded out the top-five.
Denny Hamlin, who started on the pole, led the first 15 laps until Larson got inside him in Turn 3 on Lap 16 and moved into the lead for the first time.
Denny Hamlin, Joe Gibbs Racing, Toyota Camry FedEx Freight, Kyle Larson, Chip Ganassi Racing, Chevrolet Camaro Credit One Bank
Lesley Ann Miller / LAT Images
On Lap 25, Hamlin got back around Larson on the outside to retake the lead as Truex moved into third.
Using lapped traffic, Larson went to the inside of Hamlin off Turn 2 to go back to the front of the field on Lap 39.
With 78 laps remaining, Hamlin returned the favor yet again, going to the inside of Larson to grab the lead back. Truex remained in third, Kurt Busch fourth and DiBenedetto fifth.
After 60 laps, Hamlin was able to build a 2-second lead over Larson, while Truex remained in third and DiBenedetto moved up to fourth.
On Lap 68, Joey Logano dropped down to pit road with a right-front tire going down. When he returned to the track, he was running 34th and three laps down.
With 50 laps remaining in the first stage, Larson was again closing on Hamlin for the lead as Truex remained in third.
On Lap 80, Austin Dillon slowed after tagging the wall and Jimmie Johnson got into the back of him to bring out a caution. Race leader Hamlin appeared to tag Johnson as well.
All of the lead-lap drivers elected to pit with Larson the first off pit road. When the race returned to green on Lap 88, Larson led the way followed by Elliott and Truex.
With 30 laps to go in the stage, Larson had moved out to almost a 1-second lead over Elliott as DiBenedetto ran third.
J.J.Yeley and Reed Sorenson both had to start the race from the rear of the field after their teams made unapproved adjustments to their respective cars.