After suffering defeats in the one-off Test, the ODI series and the opening T20I, the visitors produced a complete performance to keep the series alive and force a decider on Sunday.
Asked to bat first, Bangladesh posted a competitive 186 for 5, thanks to a superb 120-run opening partnership between Saif Hassan and Tanzid Hasan. Both openers registered half-centuries to lay the foundation for the innings.
Saif struck 55 off 45 balls, hitting eight fours and a six before falling in the 15th over. Tanzid followed shortly after, scoring 58 from 44 deliveries, an innings featuring six boundaries and two sixes.
Although captain Towhid Hridoy and Parvez Hossain Emon failed to make significant contributions, late cameos from Yasir Ali and Mohammad Saifuddin lifted Bangladesh to a formidable total.
Yasir scored 22 off 12 balls, while Saifuddin smashed an unbeaten 31 from just 10 deliveries, including four sixes.
In reply, Zimbabwe were bowled out for 152 with two balls remaining, as Bangladesh's spin duo of Sheikh Mahadi Hasan and Rishad Hossain dismantled the chase.
The hosts stumbled to 21 for 3, with Mahedi claiming two early wickets. A 44-run stand between Sikandar Raza (28) and Brian Bennett (29) briefly revived Zimbabwe's hopes before both fell to Rishad.
Late resistance from Brad Evans (25) and Richard Ngarava (15) was not enough to threaten Bangladesh's total.
Rishad starred with the ball, claiming 4 for 26 in 3.4 overs, while Mahedi picked up 3 for 24 from his four overs. Saifuddin also impressed with 1 for 36 and his explosive batting display, earning the Player of the Match award.
The series is now level at 1-1, with the third and deciding T20I scheduled to be played on Sunday in Bulawayo.