I would suggest you enable tracing in your code https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-trace-requests-responses-to-troubleshoot-ews-managed-api-applications and look at the result of the trace when you receive the error. If you don't have any code to handle throttling and your moving a lot of messages (one message at a time) then its mostly likely you will get throttled at some point. If you want your code to be robust you should be really expecting that some EWS requests will fail and need to retried (eg the mailbox maybe being moved etc, throttled, transient 500 errors ). Also this
Folder foundFolder = rootfolder.FindFolders(new FolderView(100)).FirstOrDefault(x => x.DisplayName == type.MailMove);
Should really be a search
var view = new FolderView(1);
var filter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, type.MailMove);
var results = Service.FindFolders(WellKnownFolderName.Root, filter, view);
But the trace is the best place to start as you can correlated what is actually happening in the server response when you receive the error