Great catch. I hadn't thought of that. In a recurring event, "end date" means something different than it does for a standard event. An end date for a standard event means that a given event spans multiple days, but for a recurring event, it's the date at which the event stops repeating.
I tried to fix this until you check in your official update, but I did not manage to do it.
It seems most of
public function _Dates()
is meaningless, because everything is done within CalendarUtil::getDateString(). I not see how I can check if I have to deal with a repeating event, though. First I thougt CalendarDateTime's is_single attribute might do the job, but now I think I'm wrong because this is set for none of my events.