Treveon Graham and Frank Kaminsky each had 14 points as Charlotte's bench shot 16 of 27 from the field.
Khris Middleton had 31 points, while John Henson and Eric Bledsoe each had 16 for the Bucks, who had beaten the Hornets the night before in Milwaukee. All-Star forward Giannis Antetokounmpo did not play on the second night of the back-to-back because of right knee soreness.
The Bucks led by one at halftime and appeared ready to break the game open after starting the second half on a 19-2 run.
But Charlotte, which missed its first six shots from the field in the third quarter, stormed back to take the lead with 3:46 left in the game after Howard backed down Henson in the lane and scored on a 3-point play and Marvin Williams converted two free throws.
The Bucks had a chance to tie it with 10 seconds left, but Middleton couldn't get to the rim while guarded by Michael Kidd-Gilchrist and had to settle for a fade-away 18-footer, which rimmed out. Michael Carter-Williams grabbed the rebound and was immediately fouled. He converted both free throws to make it a two-possession game with 8.4 seconds left.
Middleton knocked down a 3-pointer from the corner with 6.4 seconds remaining, cutting the lead to 1. Walker, who had missed three of his previous five free throws, calmly stepped to the line and made two more free throws to push the lead to 3.
Milwaukee didn't take a timeout after Walkers made second free throw and Bledsoe missed 3-pointer from the left wing that would have tied the game. Walker added two more free throws to put it away.
Antetokounmpo played against the Hornets in Milwaukee on Friday night and had 26 points and seven rebounds while playing 36 ½ minutes in Milwaukee's 109-104 victory. But Bucks coach Jason Kidd said Antetokounmpo developed soreness in the knee after the game. Antetokounmpo entered the game second in the NBA in scoring, averaging 29.6 points per game.