As Brian Mains points out in this article:
Repetition can be specified as hourly, daily, weekly, monthly, or yearly, and can end at a certain date or interval. You see that this rule is passed along to the Appointment as a string; the final result looks something like the following:
DTSTART:20081122T143000Z\r\nDTEND:20081122T170000Z\r\nRRULE:FREQ=WEEKLY;
UNTIL=20091021T040000Z;INTERVAL=1\r\n
In Telerik's examples you can see that the RecurrenceEditor accepts a RecurrenceRule object, but the Appointment's RecurrenceRule property only accepts the string representation of the RecurrenceRule object.
Right after your last line of code, just add this and it should do the trick:
recurringAppointment.RecurrenceRule = rrule.ToString()