After a poor first half, Austrian forward Marko Arnautovic stunned the home crowd with a composed finish in the 52nd minute to give Bologna the lead.
- Don't have ESPN? Get instant access
That bolt out of the blue jolted Juve into action, with Danilo heading against the post before chaos ensued 10 minutes from time as Adama Soumaoro was sent off for being ruled last man when fouling Juve's Alvaro Morata.
The referee was not done there, as he gave Bologna defender Gary Medel two quick yellow cards before brandishing a red for protesting against Soumaoro's dismissal.
Juve threw everything at the nine men in the dying moments, with Vlahovic pouncing from close range to break Bologna's resistance right at the death.
The draw means fourth-placed Juventus' hopes of mounting a late title charge are all but over, with Massimiliano Allegri's side eight points behind leaders AC Milan. They have 63 points with five games to play. Bologna stay 13th on 38 points.
"Fortunately today we managed to equalise in a match that was complicated," Allegri said. "We had a bad first half, then after we went 1-0 down we hit a post and shot a lot on goal.
"We always score goals lately, but we need to improve and be more calm in forward areas. We would have lost these games at the beginning of the season."
Juve, playing in their new, blue fourth kit, struggled to get going in the first half. Other than a Danilo strike that flashed past the post and Vlahovic's off-target header, they did not create many chances, with Bologna having some dangerous moments down the other end.
From there or in it was all Juve in terms of possession and pressure, but they remained shorn of that final pass until Morata was brought down when through on goal.
The referee did not give a foul originally, but following a VAR review, awarded Juve a free kick and sent Soumaoro off, before Medel lost his cool and earned himself a dismissal too.
A first Bologna win over Juve in 11 years was put in serious danger as a result, with Vlahovic's 50th Serie A goal denying them what would have been a deserved victory in Turin.
Elsewhere in Serie A on Saturday, bottom side Salernitana gave their faint survival hopes a boost with 2-1 victory at fellow strugglers Sampdoria, while Lucas Torreira's first-half strike earned Fiorentina a 1-0 win over Venezia.