The National League Central-leading Reds won for the seventh time in 10 games.
Bruce hit a leadoff homer in the eighth to give the Reds a 3-1 advantage and Bronson Arroyo came out in the ninth in a bid to throw a complete game. After Kevin Frandsen reached on an infield single to open the inning, however, Kevin Frandsen replaced Arroyo.
Frandsen moved to second on a wild pitch and scored on a one-out single by Ty Wigginton, who became the potential tying run at first base. Frandsen then got Chase Utley on a fly ball to center and Ryan Howard on a liner to left to collect his 31st save.
Arroyo (10-7) gave up only three hits and struck out four in his eight-plus innings.
Vance Worley (6-9) took the loss, giving up two runs on eight hits in six innings.