Getting close to figuring this out. Turns out when you use an event handler you need to explicitly change the property of 'FailPackageOnError' or 'FailParentOnError' to true. With it set to false and no event handler, if there is a failure SQL Server will return it as a failure. However, if you have set to false and use an event handler, if there is a failure SQL Server will NOT see the error. I was able to confirm this by creating a job and running with the different properties.
It's not a bug as it's doing what's it's supposed to, but I wish the default for those to properties would be set to true. What I consider somewhat of a bug is the fact that the error will bubble up to SQL Server when run as a job if no event handler is present and the 'FailPackageOnError' is set to false.
Now that I'll be able to see what the error is I should be able to fix the root of the problem. My guess is that there is a deadlock.