Darren Bent redeemed himself for an earlier miss in the 15th minute when he prodded Villa in front from point-blank range after a superb run and cross by Kyle Walker. Bent almost grabbed his second in the 21st minute when he steered Marc Albrighton's cross against a post.
Owen Coyle's men produced little of note until first-half injury time when Martin Petrov swung in a corner and Gary Cahill rose to power home the equaliser.
Villa regained the advantage in the 64th minute when Stewart Downing raced down the right and crossed for Albrighton to finish right-footed.
Villa should have wrapped the game up when Ashley Young won a penalty after being barged by David Wheater, but he fired straight at Jussi Jaaskelainen. And they were made to pay five minutes later when Stuart Holden's corner found Cahill, who saw his initial header saved before volleying home the rebound.
Bolton then snatched a winner when Chung-yong Lee's deep cross was headed back by Wheater for Klasnic to blast home.