It does not look like this is possible.
I have now resorted to using GetItem, retrieving 50 occurrences at a time.
This returns a list of GetItemResponseMessages containing either:
Succesful occurrence retrievals
ErrorCalendarOccurrenceIndexIsOutOfRecurrenceRange responsecode indicating that we have reached the last occurrence
Other 'real' errors
ErrorCalendarOccurrenceIsDeletedFromRecurrence responsecode indicating that the occurrence was deleted
So I just loop until I have found the proper date, reached ErrorCalendarOccurrenceIndexIsOutOfRecurrenceRange, or reached a maximum number of calls set in my code.