How to print a date from Date module using user timezone
The problem is the configuration of the date field itself. In its settings (field management->edit), you will find an option "Time zone handling". This option controls the way this field is parsed and its display. I will venture a guess that yours is set to "Site's time zone". This means, that the default timezone will be used to convert this datetime into UTC, and the same will be used to display it. If changed to "User's time zone" option, then user's timezone will be used instead, and the default one will be the fallback if none such is set. The latter is taken into account from the format_date() function, without your having to set the $timezone parameter explicitly. 

In your case, since each event has a timezone of its own, I would also consider the second option "Date's time zone". In this case, custom date timezone is not taken into account by format_date(), thus needs to be explicitly set. 

Read the complete documentation here