Thank you for reporting this issue.
It seems to be a bug in the latest version of RadScheduler in which in the scenario you shared the AppointmentUpdate is thrown two times. I have logged it for fixing in our internal system. Meanwhile you can workaround it by checking if the e.ModifiedAppointment.ID=null because when it is thrown second time it is returning the proper id.
Hope this will be helpful.
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed