I believe the issue is with your test: If(IsEmpty(Filter('Scheduled Items', ID))
I think you need to compare the ID from 'Scheduled Items' with the ID in your ForAll loop. As it stands, your test is always going to return true if there is at least one item in your 'Scheduled Items' list (If the ID is non-zero it will be treated as 'true').
The next fun is how to distinguish (disambiguate) between the ID in your ForAll loop and the one you want to test against (ID = ID is always going to return true as well).
Personally I use rename columns, so you have something like:
ForAll(RenameColumns('Schedule Items',"ID","ForAllID", LookUp('Schedule Items', ID = ForAllID, true) = false,
I prefer a LookUp to IsEmpty as I have found that IsEmpty and IsBlank can behave in unexpected ways depending on whether formula level error management is turned on (as PowerApps has some weird ways of dealing with Nulls, and 'not initialised' vs 'initialised but not populated). That may be resolved now, but I just got in the habit of avoiding use of those functions.