The Bobcats led most of the game but the Heat tied the score at 88 when James knocked down a jumper with 5 minutes left in regulation.
But the teams only scored two points apiece in the final 5 minutes of the fourth quarter. Charlotte's Ramon Sessions air-balled a 17-footer as the shot clock expired and James' 18-footer rimmed out at the buzzer, sending the game to overtime.
"I saw some grit," Heat coach Erik Spoelstra said. "Our guys were not happy at halftime and wanted to take a lot more pride in our defense and not just be talk but to walk the talk. They did a good job. They had us moving around and were moving the ball and attacking us and getting great looks. The second half there was more of a concentration — not only the effort but a discipline "
Ray Allen started in place of Dwayne Wade, who rested his knee after scoring eight points in the Heat's win Friday night at Philadelphia. Allen got the Heat started strong with a reverse layup and a drive down the lane to build an early 9-2 lead and finished with 12 points and nine rebounds.
Greg Oden played in his second game since returning from a long layoff and looked plenty rusty with one point and three fouls in seven minutes.
Despite the loss, Clifford said he felt good about his team's effort.
"We played a good game," Clifford said. "I feel like we're getting back to fighting, defending and staying in games. Hopefully that will help us going forward."
NOTES: The crowd of 19,631 was the largest ever to see a Bobcats game at Time Warner Cable Arena on a night in which the team began selling its Hornets gear for the first time. The Bobcats will become the Hornets after this season. ... Along with Wade, Chris Andersen did not play for the Heat. ... James heard it from the fans after air-balling a 3-point attempt late in the first quarter. ... The Heat outrebounded the Bobcats 43-34.