Another option, but not 100% reliable, would be to on rely CAS deny tokens on the call stack.
Presumably the first initial method on the loaded class would invoked by code under your control, you could then use a Deny security action to prevent the method from accessing certain parts of the .NET framework.
the code would be something along these lines:
[SecurityPermission(SecurityAction.Deny, Flags = SecurityPermissionFlag.NoFlags ^ SecurityPermissionFlag.Assertion)]
void CallExternalAssemblyClass(ExternalClass c)
{
c.SomeMethod();
}
The suggested solution has a few caveats, it assumes that you are not using Silverlight and there is a potential security risk, if the assembly was written using specially crafted CIL assembly.
The benefit gained is that you can avoid using separate AppDomains and the marshalling issues involved with multiple AppDomains.