Sri Lanka's delight at winning the toss and batting first on the slow pitch was short-lived as they crumbled to 86-5 by lunch on the opening day at the Asgiriya stadium.
The hosts were reduced to 42-5 before Kumar Sangakkara (39 not out) and wicket-keeper Prasanna Jayawardene (23 not out) ensured there were no further setbacks till lunch.
Some 3,000 English supporters, who almost outnumbered local fans, saw 30-year-old Hoggard slice through the top half, with three of his victims falling to catches by wicket-keeper Matthew Prior.
Left-handed Sanath Jayasuriya, who is reportedly considering retiring from Test cricket before the series is over, appeared like a man in a hurry when play began.
The 38-year-old executed two superb cover drives off Ryan Sidebottom and Hoggard in the first two overs, but was almost caught at short-leg by Alastair Cook.
Jayasuriya perished in the third over when he drove Sidebottom uppishly to the cover region when Kevin Pietersen lunged to his right to take a good catch with both hands.
Vandort fell in the 10th over when he mistimed a flick off Hoggard on the slow pitch and offered England captain Michael Vaughan an easy catch at mid-on.
England struck again with the first ball after the drinks interval when Hoggard forced Sri Lankan skipper Mahela Jayawardene (one) to edge an outswinger to Prior.
The Yorkshire paceman, who fashioned England's win in a first-class match in Colombo earlier this week with a five-wicket haul, then removed Chamara Silva and Jehan Mubarak in similar fashion in his next over.
Earlier, England awarded a Test cap to Ravi Bopara, preferring the 22-year-old Essex all-rounder to Owais Shah for the number six spot left vacant by the injured Andrew Flintoff.
The tourists also left out Steve Harmison to pick a three-man seam attack in Hoggard, James Anderson and Sidebottom, with a lone specialist spinner, Monty Panesar.
Sri Lanka also chose three seamers, leaving out leg-spinner Malinga Bandara to play Dilhara Fernando.
Sri Lankan seamer Chaminda Vaas makes his 100th Test appearance while off-spinner Muttiah Muralitharan is five wickets away from surpassing Australian Shane Warne's world record tally of 708 wickets.