This is expected result - special slots are actually over the regular slots, so when you drop an appointment, you receive in the DestinationSlots collection of the regular slots - they cannot be cast to the custom SpecialSlot class that you're using.
You could achieve the required approach by checking whether the SpecialSlots overlap with the destination slots with the help of the IntersectsWith method of the Slot class.
Additionally, In order to get the ScheduleView instance ( and after that its SpecialSlots) in the DragDropBehavior, you will need to use the ServiceProvider method of the DragDropState, please check the next snippet:
var scheduleView = state.ServiceProvider.GetService<IDialogProvider>()
Hope this helps.
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.