Find entries, meant to only be available on specific days, being set on incorrect days
There are a number of ways to do this. Here's one suggestion:

First, you need to be able to compare the dates for a given Entity to the available dates for its Type.

The available dates for a Type are given in terms of cycle week and week day. The dates for an Entity are actual calendar dates.

So, to my way of thinking, we should convert the calendar dates to cycle week and week day. You could do the reverse, of course, but you'd have to determine different dates for different cycles, which could get confusing.

Not sure how you're calculating days of the week and weeks; I would look at getting the number of days from Cycle.BeginDate to Entity.EntityDate, using % to get the number of days that is into the current cycle (this assumes that the Cycle.BeginDate is set once and left alone - the modulo may be unnecessary if the begin date is updated to match the current cycle). Then, that number of days should also determine the week in the cycle for that EntityDate ((NumDays + 1 / 7) + 1, assuming NumDays is an integer, should work).

I would, in addition, create a temp table with the expanded weeks and days when each Type is available. That is, replace rows with Week = 0 with 4 (or 5, depending on the Cycle.Weeks) rows (Week = 1, Week = 2, etc.), and then rows with Day = 0 with 5 (or 7, if you can book on weekends) rows, (Day = 1, Day = 2, etc.). This will allow a direct one-to-one match between the week and day values for each EntityDate, and the values from TypeAvailable. It's certainly possible to set up the comparison to handle the Week = 0 and Day = 0 values, but creating the temp table shouldn't be too expensive (depending on the number of rows in TypeAvailable), and leaves thing smuch easier for the next person to follow.

Now that you can directly compare the available weeks and days to the scheduled weeks and days, it's simply a matter of doing so, and reporting the entities without an available match. LEFT OUTER JOIN from the Entity values to the TypeAvailable temp table, and record all rows where there's no match in the temp table.