OK, I figured this out...
I was previously using PHP's date('Y-m-d') to get today's date.
Because XenForo_Application set the date_default_timezone to 'UTC', calls to date() will return UTC versions.
Here's how to get today's date string in the correct timezone:
XenForo_Locale::date(XenForo_Application::$time,'picker')