To test what I think is going on here I did the following. I created a very simple Child package containing ActiveX script with only this:
Main = DTSTaskExecResult_Failure
Which means that this task will always fail.
I then created a parent package which calls the first one via "Execute Package Task". I then created OnSuccess and OnFailure tasks (just sending myself an e-mail with "success" or "failure" for a subject). When I ran it, the "Execute Package Task" of course failed, but then the OnSuccess task got executed.
Looks like a bug to me, or am I missing something?