I figured it out.
If anyone happens to come here via a search, here's the answer:
I had set up my Gmail account in my phone as an "exchange" account so that it pushes the mail. That was the problem with the calendar. It only synced one calendar.
I just turned off the "calendar" part of my "exchange" account (gmail) and then added a second gmail account (not as exchange, but as Gmail) and chose to only sync the calendar. This made the phone use exchange to push the email, and CalDAV to push all of my google calendars.
That was complicated.