Is this rule you are trying to run a 'local' rule in both your main assembly, and also a 'local' rule in the target lower document? If so, the rule(s) may be having trouble with trying to act upon the wrong target document. It looks to me like your rule will be acting upon whichever document is 'active' at the moment it runs. If you are running the rule in the lower document from the main assembly, the main assembly will still be the 'active' document, and therefore it will be trying to act upon the main assembly document, instead of it's 'local' document. There are some techniques/changes you could do to help fix these types of issues.
If you want to keep using local rules, instead of opting for a single external rule, you can take advantage of ThisDoc. When using that identifier, it will default to the 'local' document first (if there is one), next it will default to whichever document is 'active' when the rule started. I created a post about document references you may be interested in. Then, instead of using the shortcut iLogic snippets for accessing the parameters/iProperties, you could access them through the longer/natural route of digging down past the document's component definition, to its parameters, and/or its UserParameters, then using their properties/methods. Doing it the long way ensures you are specifically working with that local document's parameters, not whatever document may be 'active' at the time.
And if you choose to go the external rule route, you can then use the other set of methods to run the rule (under the iLogicVb.Automation object) which allow you to specify the document object that you want the rule to target, such as
iLogicVb.Automation.RunExternalRule(oComponentDoc, oRuleName)
But even this method of specifying the document isn't fool proof, and still depends somewhat on how you refer to any document(s) within (if any) and which methods you are using.
Wesley Crihfield

(Not an Autodesk Employee)