Phoenix entered with a seven-game winning streak but lost to the Pistons for the second time in a month.
Billups' three-point play gave the Pistons a 107-105 lead with 1:01 left in overtime.
Suns point guard Steve Nash missed a shot, and Shaquille O'Neal fouled Antonio McDyess on the rebound.
McDyess hit both free throws to give the Pistons a four-point advantage.
Rasheed Wallace then blocked Amare Stoudemire's shot, and the Pistons put the game away from the free-throw line.
Wallace had 23 points and nine rebounds for Detroit, while Stoudemire led Phoenix with 33.
The game was close throughout the first half, with neither team leading by more than five points. After 14 lead changes and 16 ties, the Pistons took a 51-50 lead into the intermission.
Not much changed in the third, with Rodney Stuckey's late jumper giving Detroit a 76-73 lead at the end of the quarter. The Pistons expanded the lead to seven in the opening seconds of the fourth.
Nash answered with two baskets and an assist in a 10-2 run that tied the game with 5:35 to play.
O'Neal's three-point play gave the Suns a 90-87 lead, but Grant Hill missed a pair of free throws that could have given the Suns a cushion.
That allowed Billups tie the game with a pair from the line with 1:31 left.