Eh, interfaces kinda suck anyhow.
Ditch it and go with an abstract base class that inherits from MBRO.
public abstract class MyObject : MarshalByRefObject
{
protected MyObject() : base() {}
public abstract void LoadPluginAssemblyLol();
public abstract void ExecuteSuperCollider();
}
Pull that back across the boundary and control the plugin that way. Also, remember not to expose events on the type (event subscribers get pulled across boundaries without you realizing it) and you should probably only take method arguments and have return values that are primitives or strictly controlled so that you don't accidentally end up with the dll loaded in your main domain.
Another issue you'll run into is that you have to manage the lifespan of objects that are proxied via an ISponsor implementation. Otherwise the instance in the host domain gets collected after 10 minutes.
As for using MyObject, you would...
// assume an implementation such as 'class MyObjectImplementation : MyObject {...}'
var type = typeof(MyObjectImplementation);
var newDomain = CreateNewAppDomainKthx();
var controller = newDomain
.CreateInstanceAndUnwrap(
type.Assembly.FullName,
type.FullName) as MyObjectImplementation;
controller.LoadPluginAssemblyLol();
controller.ExecuteSuperCollider();