Mastahg, Are you willing to share/post the code behind the ActionManager.CanCast() method? It would be nice to be able to clearly define exactly what that method is checking.
It uses ActionReady and then InSpellInRangeLOS, it then uses an internal function to check if the action is actually usable. That function will not be made public.