Chasing a target of 273 in 50 overs, India were cruising at 100 for one in 16.4 overs when the heavens opened up, leading to play being stopped for nearly two hours.
This lead to a revised target of 150 in 26 overs, courtesy the Duckworth/Lewis method, which India achieved with seven balls to spare.
The foundation was laid by Rahane, who scored 64 off 70 balls and shared a 99-run opening stand with Uthappa, who smashed 50 off 44 balls.
The delay affected the momentum and there were umpiring howlers from Bangladesh umpire Enamul Haque Moni.
Ambati Rayudu (16) and Suresh Raina (15) were at the crease when the winning runs were scored.
Uthappa got a poor decision, as Shakib's armer hit the bat before the pad.
Nevertheless, it was an impressive comeback for Uthappa in India colours after a break of six years. He carried his IPL form into international cricket, hitting three fours and as many sixes.
The best shot was when he reached to the pitch of a flighted delivery from Shakib al-Hasan and lofted him effortlessly over extra cover. The other two were hit off left-arm spinner Abdur Razzak and medium pacer Ziaur Rahaman.
Rahane was also a delight to watch as he stepped out to lift Mortaza over extra-cover and then pulled him towards mid-wicket for a boundary.
He also used the sweep shot against Razzak.
Cheteshwar Pujara (0) will consider himself unlucky as he got another howler from Moni, adjudged leg before off Shakib, with ball hitting him on the thigh pads and clearly going above the stumps.
Rahane finally completed his sixth ODI half century off 60 balls while Ambati Rayudu seemingly struggled against the slow bowlers before victory was clinched.
Earlier, an inexperienced Indian attack, led by fast bowler Umesh Yadav, performed admirably on a flat track to restrict the hosts to 272 for nine in 50 overs.
Yadav grabbed three for 48 in nine overs as skipper Mushfiqur Rahim (59) and star all-rounder Shakib al-Hasan (52) struck half-centuries after the former opted to make first use of the conditions.
Debutant Parveez Rasool (2-60) grabbed couple of important top-order wickets while Amit Mishra (2-55) struck twice at the end.
With a combined ODI experience of 56 matches, Yadav (28), Amit Mishra (23) and Mohit Sharma (5), the five-pronged bowling attack, with two debutants in Rasool and Akshar Patel, did well collectively considering the dead nature of the strip where a 300-plus score was there for the taking.
Bangladesh were scratchy in the beginning with senior opener Tamim Iqbal (0) looking completely out of sorts. Umesh ended his misery with last ball of the fourth over which the left-hander edged to Wriddhiman Saha behind the stumps.
The ball moved a shade and he nicked it, having failed to open his account off the previous 10 deliveries.
Anamul Haque Bijoy (44) got his first couple of boundaries in the fifth over bowled by Mohit Sharma when he got one with a thick slash through third man followed by a cover drive.
Mominul Haque (6) also did inspire much confidence before he tried to drive away from his body to a Yadav delivery which was gleefully pouched by Wriddhiman.
Anamul was joined by his captain Mushfiqur Rahim (59) as the duo started the repair work on a cautious note.
The duo added 52 runs during their third wicket stand, with Anamul getting a few boundaries.
Among the two debutant spinners, Akshar Patel's (1-59) in 10 overs) first outing was certainly disappointing as he looked very flat with his execution.
The pitch was a bit slow but the young Gujarat lad showed very little variation in his deliveries. He mostly bowled flat and there was certainly not much turn on offer for him.
Rasool, who created history by becoming first cricketer from Jammu and Kashmir to play for India, was more positive in his approach although he did get a bit of stick from Shakib and Rahim.
He was not afraid to flight the ball and also at times surprised the batsman with quick change of pace of his deliveries.
He first induced Anamul to come out and try to hoick it over deep mid-wicket but couldn't get the required elevation as he was taken by Ambati Rayudu low down. Anamul hit seven fours in 60 balls.
Rahim, who was batting well in Shakib's company, hit three fours and three sixes with his 15th ODI half-century coming off 56 balls. However he was also deceived in the air by Rasool as Ajinkya Rahane took a simple catch at mid-off.
Shakib and seasoned Mahmudullah Riyadh (41) then added 65 runs in the next 11 overs as they hit the occasional boundaries and also took the singles.
Shakib's 26th ODI half-century came off 52 balls which had a big six over deep mid-wicket off Rasool as well as straight four over the bowler's head.
He also got two more boundaries off Raina and Mohit Sharma before he offered a simple return catch to the Indian captain.
Shakib's 52 came off 58 balls.
However his dismissal led to a mini-collapse, as Mahmudullah was cleaned up by Mishra and suddenly a couple of more wickets saw Bangladesh tottering at 235 for eight.
But Mashrafe Mortaza (18) and Abdul Razzaq (16) ensured that the home team put up a decent total.
Image: Ajinkya Rahane
Photograph: Scott Barbour/Getty Images
Testing time for reserves as India take on Bangladesh
Tiwary, Uthappa named India 'A' captains for Australia tour
We need to try a lot of players before World Cup: Raina
Rasool becomes first J&K player to represent India
Bangladesh pick uncapped Taskin, Mithun for India ODIs