Keselowski took the checkered flag just after midnight on Memorial Day.
Elliott, who took the lead from Keselowski with 38 laps to go, was leading with three laps to go in the scheduled 400-lap distance when the caution came out for a William Byron spin, a result of a cut left-rear tire.
Elliott was then among a group of drivers, including Martin Truex Jr., who pit under the caution, giving Keselowski the lead on the restart with Johnson second.
“I feel like I’ve thrown this race away a handful of times,” Keselowski told Fox. “I thought we were going to lose it today. I know we’ve lost it the way Chase lost it and that really stinks and today we finally won it that way and I’m so happy for my team. I wish my wife was here, I wish my daughters were here. It’s a major! It’s the Coke 600. That leaves one major for me, the Daytona 500. We’re checking them off.”
The race was stopped for rain in the middle of Stage 1. The delay lasted 1 hour and 9 minutes.
STAGE 1 WINNER: Alex Bowman
STAGE 2 WINNER: Alex Bowman
STAGE 3 WINNER: Joey Logano won it after he and two other drivers stayed out of the pits during a late caution.
WHO HAD A BAD RACE: Denny Hamlin‘s chances at a win were dashed before the green flag. A piece of ballast fell off his car during the pace laps and he was forced to have it repaired on pit road before he could start the race. He joined the race on Lap 8 and he finished 30th … Clint Bowyer finished last after a lower control arm on his car broke, causing him to hit the Turn 2 wall with four laps left in the first stage. He was the first car out of the race. … Bubba Wallace placed 39th after he fell out due to mechanical problems … Ryan Newman finished 28th after suffering battery issues .. Matt Kenseth finished 27th after he had an early speeding penalty and then got into the wall on Lap 276.
WHAT’S NEXT: The Cup Series returns to Charlotte Wednesday night for a 500-kilometer race (8 p.m. ET on FS1).
Check back for more.