Why does this query not return records where both fields using CASE WHEN are zero?
You need to do a LEFT OUTER JOIN on goal to pick up the 0-0 games. 

SELECT mdate, 
  team1,
  sum(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) score1,
team2, 
  sum(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) score2
  FROM game 
LEFT OUTER JOIN goal ON matchid = id
group by mdate, matchid, team1,team2
order by mdate, matchid, team1 ,team2


You were nearly there.