BC had an excellent chance to win, but Nate Freese's 23-yard field-goal attempt hit the left upright and bounced back with 43 seconds left. Freese already had missed an extra point by hitting the right upright but made two long field goals.
Duke (1-2) won for just the second time in its last 11 conference openers. BC (0-3) is off to its worst start since 1991 when it finished 4-7 under Tom Coughlin.
Duke rallied from a 19-7 deficit late in the first half and went ahead with 9:57 to go. Renfree led the decisive 70-yard drive after the Blue Devils wasted two solid scoring opportunities in the second half -- an interception at the BC 3 and a missed 33-yard field goal attempt.
The game matched two of the worst run offenses in the ACC -- BC was ranked 12th and last, while Duke was 10th. And the Eagles, who led the nation in run defense last year, had allowed an average of 231 yards rushing in their first two games.
BC scored first on a 31-yard pass from Chase Rettig to Tahj Kimble, ending a 55-yard drive with 5:57 left in the first quarter. It began after Spenser Rositano blocked a punt by Alex King and Will Thompson recovered.
The Eagles made it 10-0 on a 43-yard field goal by Freese with 4:16 gone in the second quarter. Duke cut the lead to 10-7 on a 53-yard pass play from Renfree to Vernon, who caught the ball between two receivers and ran about 30 yards to the end zone. It was Renfree's first scoring pass of the season.
Freese's 47-yard field goal made it 13-7 with 4:03 left in the half. Andre Williams scored on a 7-yard run with 1:21 remaining, but Freese missed the extra point.
Duke then marched 63 yards in just 51 seconds to score on Renfree's 21-yard pass to Vernon and trailed 19-14 at halftime.
In his first two games, losses to Richmond and Stanford, Renfree completed 70 percent of his passes (42 for 60) but none for touchdowns.
BC struggled in the second half for the second straight game. It scored a field goal on its first series against Central Florida but lost 30-3.