A Marvin Sordell penalty secured the points while Jonathan Woodgate was dismissed for the visitors.
The Boro defence were nearly breached within the first two minutes when Bolton's Craig Davies tried a speculative 18-yard shot that Jason Steele did well to tip around the post.
Bolton looked the more likely to break through and after 27 minutes Darren Pratley went close again from distance before Davies tried his luck again.
The visitors were the first to show after the interval when a shot from Mustapha Carayol from 20 yards brought a desperate stop from Adam Bogdan, but the Trotters broke the deadlock on their next foray upfield.
Chung-Yong Lee's pass provided the opportunity and from 12 yards out, Chris Eagles made no mistake for his 10th goal of the season to make it 1-0 after 50 minutes.
But if the hosts expected Tony Mowbray's men to roll over they were proved way off the mark six minutes later when Scott McDonald crossed from the left and Kieron Dyer headed home from six yards out for the equaliser.
Parity lasted a mere three minutes, though. Woodgate's foul on Lee resulted in a booking for the former Leeds man and a penalty, from which Sordell restored the hosts' lead.
Five minutes later another Woodgate foul - this time on Sordell - saw the Boro man dismissed and the visitors' hopes effectively disappear.
Bolton almost added to their tally with 10 minutes left but Steele did well to keep out another effort from distance by Sordell.