直接的な原因はわからないんだけど、

curl_setopt($ch, CURLOPT_FILETIME, true);

をするとタイムゾーンが狂ってしまう。

アクセス先のレスポンスヘッダの Date が GMT だったらなるのかな? とりあえず、false にすれば、タイムゾーンは変更されなかった。 うーむ、謎だ…