format_date() seems to ignore the time zone
Yep, i was having similar problems, but in Drupal 6. 

I'm surprised your  $field_event_date[0]['value'] was in New York time. My understanding is that that value comes straight out of the database, and it's pretty standard to keep all times in the db as UTC times, and only use local times when displaying them (since local times go crazy a couple of times a year).

$field_event_date[0]['timezone_db'] will tell you for certain what timezone $field_event_date[0]['value'] is in.

And $field_event_date[0]['timezone'] will tell you what timezone it should be displayed in (according to your site's 'default timezone'). If you look at $field_event_date[0]['view'], it should be in the display timezone.

When i'm trying to display dates from the raw 'value', i do something like...

/** 
* @param
*     $date A CCK date field, like you'd get in your node templates,
*     e.g. $field_event_date[0]
*/
function get_display_date($date) {
    $date_convert = new DateTime($date['value'], new DateTimeZone($date['timezone_db']));
    $date_convert-&gt;setTimezone(new DateTimeZone($date['timezone']));
    return $date_convert-&gt;format('Y-m-d H:i:s');
}


I've yet to find any documentation which can confirm all this, so i may be totally wrong! But it works for me so far. Hopefully Drupal 7 isn't too different.