Miami was without Dwyane Wade, suspended for a game by the NBA for flailing his leg and making contact with a Charlotte player Wednesday.
The Detroit reserves, who scored 85 points in a loss to Atlanta on Wednesday, contributed 64 this time. Charlie Villanueva had 18 points and Austin Daye added 11, helping the Pistons snap Miami's six-game winning streak.
"Their bench came in and turned it up about 17 notches. We let them get into a comfort zone in the second quarter, and after that, they were making all kinds of contested shots," James said. "It's hard to make any kind of run when a team keeps doing that to you."
The Heat scored the game's first 10 points and led by 15 after one quarter, but the momentum shifted for good when the Pistons outscored Miami 41-20 in the second.
Miami had cut a 17-point deficit to four early in the fourth, but Detroit's reserves steadied themselves. Rookie big man Andre Drummond scored inside, Villanueva scored after a turnover by James, and a 3-pointer by Bynum pushed the lead back to double digits at 88-77.
"That little split of doubt that you can have -- it's a turnover, it's a missed shot, it's a bad play," Bynum said. "You just have to be aggressive and confident."
That's rarely a problem for Bynum, who looks out of control at times but can lift his team with his energy. He's played in only 22 of Detroit's 32 games this season, but he scored 31 points Wednesday and followed it up with another remarkable performance against the Heat.
"Will kind of got squeezed in the rotation," Pistons coach Lawrence Frank said. "Had several DNPs, stayed the course, and he deserves all the credit."
Detroit led 95-84 after Villanueva corralled a wild pass from Bynum and made a 3-pointer. Daye added a dunk in transition off a slick drop pass from Bynum for a 101-90 lead.
Bynum scored 13 points in the fourth quarter.
"He was amazing," James said. "He controlled the game with his motor and his offense. He was hitting everything and he was getting everyone else involved. We couldn't do anything with him."
The Pistons shot 58 percent from the field to Miami's 51. The Heat had been 31-0 since the beginning of last season when shooting at least 50 percent.
The Heat said before the game they didn't agree with Wade's suspension for making contact with Charlotte's Ramon Sessions earlier in the week.
"That's no excuse. We still had enough," Heat coach Erik Spoelstra said. "Obviously, we're a different team with Dwyane, but we have enough depth that we should be able to overcome missing one guy for a night."
Miami breezed through the first quarter, taking a 10-0 lead and eventually making 11 of its first 14 shots. It was 32-17 after one, but the game turned almost immediately.
Detroit's bench was again outstanding. The Pistons scored the first 14 points of the second and finally took a 41-39 lead on Villanueva's 3-pointer.
The bench -- specifically Villanueva, Bynum, Drummond and Daye -- scored 36 of Detroit's 41 points in the quarter, and the Pistons went into halftime with a 58-52 lead.
And that was only the beginning. Miami didn't start the third quarter any better than the second, allowing nine straight points. Greg Monroe's basket made it 76-59, and although the Heat increased the pressure defensively, they didn't always get the results they wanted.
After Shane Battier and James made consecutive 3-pointers to pull Miami within nine, James thought he'd knocked the ball away from Jason Maxiell cleanly near midcourt. But a foul was called and Maxiell made one of two free throws to make it 79-69.
It was 81-71 after three.
Udonis Haslem is now Miami's career leader with 620 games played, snapping a tie with Wade because of the suspension. Haslem appeared to hurt his right shoulder early on when landing hard after an acrobatic block on Kyle Singler, but he was able to play on. ... Drummond had 10 points and 10 rebounds. ... James and Bosh were the only Miami players to score in double figures.