India gave away just 64 runs in the last 10 overs to restrict Sri Lanka to 264 in their last group match at Leeds, Headingley on Saturday.
Bumrah dismissed both the openers cheaply to leave them at 40 for 2 in the 8th over. The Sri Lankans were quickly reduced to 55 for 4 as Jadeja and Pandya got into the act with a wicket apiece.
Angelo Mathews and Lahiru Thirimanne then steadied the ship with a 124-run partnership before the latter fell for a well-made 53.
At the end of 40 overs, Sri Lanka had reached 200 for 5 with Mathews anchoring the innings on 85. He went on to score a hundred off 115 balls. Incidentally, all three of his ODI hundreds have come against the same opposition.
In the first five overs of the death, 33 runs were scored with not much of an acceleration coming from the Sri Lankans.
Mathews was finally dismissed for 113 after he was caught by Rohit Sharma at mid-off to give Bumrah his third wicket.
Thishara Pereira, who could have caused damage, then fell to a brilliant catch off Pandya to be the 7th Sri Lankan wicket to fall.
Bumrah was the pick of the Indian bowlers with 3 for 37. However, his opening bowling partner Bhuvneshwar was taken for runs as he went for 73 off his 10 overs with the lone wicket of Pereira.
Earlier, Sri Lanka skipper Dimuth Karunaratne won the toss and chose to bat first.
India, already through to the semi-finals, made two changes with Yuzvendra Chahal being rested and Kuldeep Yadav playing in place of him.
All rounder Ravindra Jadeja was given his first opportunity to play in the World Cup in place of pacer Mohammed Shami.
Sri Lanka, out of the World Cup, brought back Thisara Perera in place of Jeffrey Vandersay.
"We would have batted first as well, used pitch, will get slower as the match progresses. The team is doing well, we are striking a good balance at the right time. Two changes for us, one forced. Chahal has been rested and so is Shami. Kuldeep and Jadeja are in," Kohli said at the toss.
With IANS inputs