You do a CAST to a TIME data type, but the other columns seem to be of DATETIME or DATE date type. Most likely the values in the VARCHAR are like
'2016-10-23 20:44:11', you cannot fit that into a TIME data type, the DATE part is lost, but it doesn't raise an error.
If there were errors in your data, like '25:84:71' (more hours than 24, more minutes than 60, more seconds than 60 ...) that would give another error message.
Change
Cast(C.ClassTime as time) as StartDate
into
Cast(C.ClassTime as datetime) as StartDate
or use
CONVERT(datetime, C.ClassTime, 120)
Here you can find what format parameter you have to use, depending on the format of the date/time in your VARCHAR column.
It's not clear to me what the problem is. Try to get the first part of your query good without the UNION and the second part. Only then add the second part and the UNION.
When do you get that error? With the first part, or only after you added the second part and the UNION?