@v-siky-msft thanks for all your help on this today. I've finally managed to sort it I think:
the main gallery collection (_MyCalendarEvents) populates like this:
Set(_minDate, DateAdd(_firstDayOfMonth, -(Weekday(_firstDayOfMonth) - 2 + 1), Days));
Set(_maxDate, DateAdd(DateAdd(_firstDayOfMonth, -(Weekday(_firstDayOfMonth) - 2 + 1), Days), 40, Days));
ClearCollect(MyCalendarEvents, Office365Outlook.GetEventsCalendarViewV3(_myCalendar.id, Text(_minDate, UTC), Text(_maxDate, UTC)).value);
Then at the gallery item level I have retrieved the series data like this:
If(Not(IsBlank(ThisItem.seriesMasterId)),
First(Filter(Office365Outlook.V4CalendarGetItems(_myCalendar.Name,{'$top':500}).value,id=ThisItem.seriesMasterId)).numberOfOccurences
&" "&
First(Filter(Office365Outlook.V4CalendarGetItems(_myCalendar.Name,{'$top':500}).value,id=ThisItem.seriesMasterId)).recurrence
&" occurrences starting on "
&DateValue(First(Filter(Office365Outlook.GetEventsCalendarViewV3(_myCalendar.Name, Text(_minDate, UTC), Text(_maxDate, UTC)).value,seriesMasterId=ThisItem.seriesMasterId)).start,"en-GB"))
If anyone finds a cleaner way I'd love to hear it, otherwise I hope this helps someone else out!