Irish-born left-handed opener Ed Joyce top-scored with 66 while Paul Collingwood finished on 62 not out off 48 balls with one six and four fours.
Former Guyana left-arm spinner Sunil Dhaniram, now a fork-lift truck driver, took three wickets for seven runs in 11 balls as England declined from 153 for one to 161 for four.
However, a fifth wicket stand of 81 between Collingwood and Ravi Bopara, who made 29 on his World Cup debut and in only his second match at this level after replacing Flintoff, revived England's innings.
Paul Nixon added late impetus with a dynamic 23 not out off just eight balls. The wicket-keeper who, also hit four fours, ended the innings by lofting former West Indies fast bowler Anderson Cummins for a straight six.
Dhaniram, 38, removed Ian Bell (28), Joyce and dangerman Kevin Pietersen (five) on his way to figures of three for 41 from his full 10 overs.
Flintoff was dropped for a "breach of team discipline", the all-rounder one of several players fined for staying out until the early hours of the morning after England's six-wicket defeat by New Zealand in their World Cup opener here Friday.
England, who lost the toss, saw openers Joyce and captain Michael Vaughan score briskly against a new-ball attack of Cummins and left-armer Umar Bhatti.
Minnows Canada, thrashed by seven wickets in their World Cup opener against Kenya last week, then saw skipper John Davison bring himself and fellow off-spinner Abdool Samad into the attack.
Irish-born left-hander Joyce, on 30, gave a difficult chance against Samad when he drove to cover where the ball just reached Desmond Chumney who failed to hold on with England 84 without loss.
The Middlesex batsman then went down the pitch to spinner George Codrington's third ball and lofted it for six.
But three balls after England's first century opening stand in 27 one-day internationals, Vaughan was out for 45 when a slashed square-cut off Samad was caught by Davison at backward point to leave England 101 for one off 20 overs.
Vaughan faced 64 balls with seven fours.
His innings was his highest score in a one-dayer since he made an unbeaten 59 in England's nine-wicket win against Australia at his Headingley home ground in July 2005.
Joyce, on 46, had another scare when an edged drive off Davison brushed past Ashish Bagai, before completing his third fifty at this level.
But at the other end England lost Bell (28) when a top-edged sweep off Dhaniram was caught by Codrington, England 153 for two in the 34th over.
And in his next over Dhanirman struck twice in six balls as England, just as they'd done against New Zealand, lost a clutch of wickets in quick succession.
First Joyce was bowled reverse-sweeping to end a 103-ball innings before Pietersen chipped a return catch to the gleeful bowler.
First innings scoreboard:
Fall of wickets: 1-101 (Vaughan); 2-153 (Bell), 3-160 (Joyce), 4-161 (Pietersen), 5-242 (Bopara), 6-245 (Dalrymple)
Did not bat: L Plunkett, J Anderson, M Panesar
Canada: Geoff Barnett, Abdool Samad, Ashish Bagai (wk), Ian Billcliff, John Davison (capt), Desmond Chumney, Ashif Mulla, Sunil Dhaniram, Umar Bhatti, Anderson Cummins, George Codrington
Umpires: Billy Doctrove (WIS) and Peter Parker (AUS)
TV umpire: Rudi Koertzen (RSA)
Match referee: Jeff Crowe (NZL)