Documentation leads me to say these times are set to UTC always;
If the Event IsAllDayEvent flag is set to false (indicating that it is not an all-day event), then the event start date information is contained in the StartDateTime field. The time portion is always transferred in the Coordinated Universal Time (UTC) time zone. You need to translate the time portion to or from a local time zone for the user or the application, as appropriate.
but when I try adding a recurring event which crosses a time when clocks move forward/backward the hours changes when running a SOQL in the developer console. See below;
select id, subject, startdatetime from Event order by startdatetime
You can see the hour goes back from 8am to 7am during the weekend of 6th October, but UTC time never changes, so this is GMT surely no?!