The iPhone and other apple products send timezone information for a meeting using the current year. Since the first switch of a normal timezone occurs somewhere in march, all events created between 1 jan and the switch will be converted incorrectly in libical.
PRODID:-//Apple Inc.//iPhone 3.0//EN
Here the DTSTART of the VEVENT on 31 jan is before the daylight switch mentioned in the vtimezone definition.
Now when calling icaltime_as_timet_with_zone with the DTSTART and the timezone it's defined in will return the same time (12 o'clock) as the utc time, which is wrong. This is because icaltimezone_get_utc_offset did not expand 2012, and so the loop there will not find a match. In that case it will just return UTC. Which is probably the worst value to return.
I attached a patch which will return the prev_utc_offset for this case instead of UTC, which I think is a better probability of being correct. Ofcourse you could make an item where the DTSTART of the item is far before the given timezone, but that case would be very weird for clients to send. For that case the expantion code would need to be fixed to be able to search before, and not after.