Bart,
I found calendar search pages suffered the same issue - couldn't use a paint layout.
Creating a good iCal feed is actually pretty hard. There are a few parameters which Matrix outputs routinely which will break a feed if not used carefully.
For example, if an event doesn't have a time component specified it truncates event_start_ical to display only the date, which is fine, but unless the property is then preceded in the feed by a 'VALUE=DATE' the feed is not valid. So, straight away, you have a conditional situation.
The other really tricky thing is around assumptions made in the iCal standard regarding event duration.
If a matrix event is from Jan 1, to Jan 3, it's regarded as inclusive - a three day event. But the ical standard assumes it's from 12am on Jan 1, to 12am on Jan 3 - a two day event. Therefore, if a Matrix event is just one all-day event, then it will simply disappear when imported into a calendar, as it has no duration. Tricky eh?
On the other hand, iCal can take a duration instead of an end date/time, and Matrix reports Duration correctly, so, you can see why I was suggesting the event_duration_ical keyword as a really neat solution.
Lots of fun :-)