1. Have you tried using EditMate2 on a top level mate? I would recommend trying this to see if you are able to get EditMate2 to work at all, this way you can determine if the issue is really related to sub-assemblies or whether it is related to your code. I know it does work. I have used it in the past. For example, see the video at the bottom of this blog post: Mating Automation Techniques.
2. IAssemblyDoc::EditAssembly is only used to leave in-context assembly editing. For example, you would edit a part in context using IAssemblyDoc::EditPart2, then you would return to the assembly with EditAssembly. So, no, it is not the same as "Edit Assembly" in the user interface. Instead you should it EditPart2.