This is my understanding.
You get NoSuchObjectException thrown if the client tries to invoke a method by using a stub to the
EJB Object which is not usable - gone, corrupt, whatever.
You get RemoteException thrown if the client, using a stub to a valid EJB Object, invokes remove or any other business method on a bean that's already been removed.