First of all, did you look at the query plans between the two approaches? Or flush caches?
Secondly, why use a boolean flag when the below approach is simpler and should yield the same plan? (I'll try to verify that with your test data):
LEFT JOIN @CalTable AS ct ON
wt.Work_Start <= ct.CalDate
WHERE ct.CalDate <= wt.Work_End
Third, as Carlo points out, your approach is not identical to the original query. It partially transforms a left join into an inner join, which may go a long way to explaining why it ran faster.