I managed to evaluate a predicate declared in a module different than the one used to generate the solution, but only through a dirty workaround by working at the String level.
Here are the steps I followed:
Extract the body of all the predicates and mapped them to their name (by parsing the file myself)
Extract the names of the argument taken by those predicates using the Alloy API (more convenient, but one could also retrieve those by parsing the content of the module directly)
Replace in each body (recovered in step 1) the occurrence of the argument names (recovered in step 2) by the desired expression. (the value you want to associate to your arguments, be it a sig, an atom , or any other alloy expressions)
Parse the body obtained in 3 as an Alloy Expression (using CompUtil.parseOneExpression_fromString) and evaluate it in the solution.
Dirty... but working ... ;-)