Sri Lanka seemed to have set an underpar total before a brilliant effort with the ball saw them bowl out Bangladesh for 142 to seal a 79-run victory.
The 10-wicket win left Zimbabwe in third place in the tri-series and handed Sri Lanka another match against hosts Bangladesh in final on Saturday.
Allrounder Shakib Al Hasan scored a half-century and picked up three wickets to help the hosts beat Zimbabwe by 91 runs.
The all-rounder picked up 4 wickets and compiled a timely unbeaten 39 as Sri Lanka overcame Zimbabwe by 5 wickets.
The opener hit his second successive fifty while the allrounder followed his 67 with three wickets to crush Sri Lanka by 163 runs.
Zimbabwe pulled out a narrow victory against Sri Lanka by 12 runs in tri-series match at Mirpur on Wednesday.
Tamim struck an unbeaten fifty to guide Bangladesh to an eight-wicket win over Zimbabwe
Bangladesh and Zimbabwe have a point to prove when they battle each other in a tri-nation one-day tournament in Dhaka from Monday.
Rookie fast bowler Shehan Madushanka in Sri Lankan squad for tri-series Angelo Mathews would return as skipper.
Bangladesh have made five changes to their squad which includes the inclusion of Mustafizur Rahman.