Reggie Bullock scored 22 points for the Tar Heels (10-4, 0-1), who lost for the first time in five visits to John Paul Jones Arena.
Bullock's final basket came with 3:11 to play, pulling the Tar Heels within 51-50, but Harris scored on a short bank, Paul Jesperson made a driving layup and Virginia hit 6 of 8 free throws before P.J. Hairston scored again for North Carolina, making a free throw with 20 seconds left.
North Carolina scored on its first four possessions of the second half, and Bullock's 3-pointer capped a 9-2 run that gave the Tar Heels a 34-26 lead. After an exchange of baskets, Harris came free for a wide-open 3-pointer, sparking a 10-0 run for Virginia, and when Evan Nolte soon followed with back-to-back 3-pointers, Virginia's lead was 46-40 and the Tar Heels never quite caught up again.
The game marked the return of Virginia captain and point guard Jontel Evans, who had missed nine of the first 13 games with a foot injury. Teven Jones started in his place and made two early 3-pointers as Virginia hit four of its first five baskets from behind the arc, and Evans played in short bursts.
He finished with eight points and six assists, and had a steadying influence.
North Carolina led 25-24 after a physical and methodical first half. Neither team led by more than five.