Yeah, this is an unfortunate corner case due to the internals of the design.
Basically, all registrations except type mappings are keyed off concrete types, not interfaces. So when you do what you did in the first post, Unity will:
1) Look up type mapping: ITest -> Test
2) Look up factory for type Test
It doesn't matter that you've got a factory registered for ITest in the child container, because by the time you get to that stage in the creation pipeline, the container's no longer looking for ITest.
That's why doing RegisterType<ITest, ITest> works - it finds a type mapping ITest -> ITest, and then goes looking for a factory for ITest.