Without a repo code I doubt we will be able to help. We use SSIS everywhere and our OnError logic works fine. But I'm a little concerned over your setting of the failure properties. Not sure why you'd set this on all the tasks. In general each "container" can have an error flow. The error flow is where you put your error handling. For example most people log to some external error log. All your tasks can point to the same error flow (for convenience) or do something different, depending on your needs. Seems like you should be able to put a breakpoint in your error flow task and run it in the designer to verify the error handling is working correctly.
You should also probably consider looking at the output logs for SSIS to see how the package is flowing. This will help indicate whether it is actually calling your error flow task and your task is just not working properly.