Allgaier held Bell and the rest of the field at bay in a 12-lap shootout to capture his second win of the year.
Allgaier led a career-high 182 laps and swept every stage.
“We had a great car today, these guys did a fantastic job,” Allgaier told Fox Sports 1.
The JR Motorsports driver took the lead for the first time with two laps to go in Stage 1 when he passed pole-sitter Austin Cindric.
The win qualifies Allgaier for the playoffs. His first win at Dover was disqualified toward playoff contention after his car failed post-race inspection.
Bell placed second after starting from the rear. His car failed to get through qualifying inspection, resulting in him not making a qualifying attempt.
“Man, I just needed to be in front of (Allgaier)” Bell told FS1. “It was really good on the bottom in both corners. I just didn’t have enough to clear him.”
STAGE 1 WINNER: Justin Allgaier
STAGE 2 WINNER: Justin Allgaier
WHO HAD A GOOD DAY: Christopher Bell earned his fourth top-two finish of the season … Daniel Hemric claimed his fourth top-three finish in the last five races … Riley Herbst placed sixth in his series debut … Justin Haley placed 12th in his debut … Kaz Grala placed 10th for his second top 10 in four starts for Fury Race Cars … Ty Majeski finished seventh, giving Roush Fenway Racing’s No. 60 team its first top 10 of the season.
WHO HAD A BAD DAY: Elliott Sadler cut a tire and got into the wall late in Stage 1. He finished 28th for his second straight finish outside the top 25. He had finished in the top 10 in the first 12 races … Brandon Hightower wrecked with 17 laps to go to set up the final restart. He finished 30th.
WHAT’S NEXT: Overton’s 300 at Chicagoland Speedway at 3:30 p.m. ET on June 30 on NBCSN