The tourists had struggled to make 228 for nine in their 50 overs and looked to be on their way to defeat when Zimbabwe raced to 91 without loss.
But Zimbabwe then folded meekly after openers Terrence Duffin (37) and Vusi Sibanda (64) were out, the hosts going on to assemble only 215 all out with two balls remaining Friday.
With only one match to play, Bangladesh hold an unbeatable 2-1 lead.
The tourists' main effort centred upon Shahriar Nafeez with 69, his 13th one-day half century, and Mushfique Rahim, who made 42, who put on 100 runs for the fourth wicket.
This turned out to be a match-winning combination.
Bangladesh had earlier been in trouble on 10-2 and again afterwards when they slumped from 136-3 to 146-6.
But skipper Habibul Bashar, supported by Mashrafe Mortaza, took Bangladesh to a reasonable total representing a sporting chance against a notoriously unpredictable home side.
It all looked so good for Zimbabwe with Sibanda at the wicket again impressive on 64.
In the previous matches he had produced 47 and 93 not out. With Duffin holding firm, they had set up a decent launch pad.
But Masakadza scored only six in 21 balls, Brendan Taylor 13 in 30 balls and Keith Dabengwa 18 in 31 balls as they tried to consolidate.
But instead of that they dug Zimbabwe into a hole and were never able to climb out of it. The run rate required rose and wickets tumbled as the tail tried forlornly to engineer a recovery.
From 202-6, Zimbabwe managed only another 13 runs from the last 34 balls.
The series winds up with a fourth and final match here Saturday.
Bangladesh 228 for 9 in 50 overs (Shahriar Nafees 69, Mushfiqur Rahim 42, Habibul Bashar 31, M Mortaza 29; A Ireland 3 for 53, Dabengwa 1 for 23, E Chigumbara 1 for 26) beat Zimbabwe 214 all out 49.4 overs ( V Sibanda 64, T Duffin 37, E Chigumbara 33; Tapash Baisya 2 for 50, Saqibul Hasan 1 for 29, M Mortaza 1 for 32) by 14 runs