Skipper Dhoni hit a 62-ball 67 while Raina scored 54 off 66 balls to inspire India's successful run chase of Sri Lanka's 308-8 with a 99-run third wicket stand in a tight match at the National Stadium.
Yuvraj Singh (36 not out) smashed two successive boundaries off paceman Nuwan Kulasekera to bring up the victory with 3.1 overs to spare. Rohit Sharma remained unbeaten on 22.
By winning, India also knocked arch-rivals Pakistan out of the tournament, setting up a return clash with Sri Lanka in the final on July 6.
Sri Lanka and India finished the Super League with six points each from three matches after both sides had two carry over points from the first round.
Pakistan, with two points from two matches, will meet winless Bangladesh in an inconsequential match on Friday.
India's opener Gautum Gambhir set the tone for the run-chase with a rapid 61-ball 68 studded with eleven boundaries, with Dhoni and Raina maintaining the quick tempo.
Dhoni notched five boundaries and a six while Raina managed three boundaries. But with 75 needed, India suffered the first of two setbacks when Raina was run out.
Two overs later, off-spinner Muttiah Muralitharan produced a beauty to bowl Dhoni with 56 still needed for victory but Yuvraj and Rohit saw India through.
Sri Lanka, who rested spearhead Chaminda Vaas and fast rising spinner Ajantah Mendis as they had already qualified for the final, failed to stop Indian openers Virender Sehwag (42) and Gambhir who smashed 71-ball 92 for the opening wicket.
Sehwag fell in the 12th over, miscuing a drive off Kulasekera, while Gambhir was trapped leg-before by Muralitharan.
Earlier Sri Lanka were lifted by three half-centuries from Chamara Kapugedera, Mahela Jayawardene (50) and Chamara Silva (50).
The 24-year-old Kapugedera added 78 for the third wicket with skipper Jayawardene (50) and another 68 with Silva (50) to bolster the Sri Lankan innings after they won the toss and decided to bat.
Kapugedera and Jayawardene steadied the innings through their 89-ball partnership after Sri Lanka lost opener Kumar Sangakkara (seven) and Sanath Jayasuriya (43) with the score reading 71.
The Sri Lankan skipper hit four boundaries while Kapugedera hit seven boundaries and a six during his 78-ball knock.
Silva then took over, hitting two boundaries and a six off 56 balls before he was run out with five overs to go.
Jayasuriya batted in the same vein as he did during his 130 against Bangladesh in the Super League match on Saturday, driving and cutting with power.
He hit eight boundaries during his 37-ball knock before he was caught behind off Sharma who finished 2-55.