Okay, for reference, I found the problem. It was my plugin after all; I didn't clear core/cache when I disabled it as a test the first time.
Here is the code I'm using:
<?php
/* Setup context mapping */
switch ($modx->getOption('http_host')) {
case 'site1.local:80':
case 'site1.local':
case 'www.site1domain.com:80':
case 'www.site1domain.com':
// if the http_host is of a specific domain, switch the context
$modx->switchContext('site1');
break;
case 'site2.local:80':
case 'site2.local':
case 'www.site2domain.com:80':
case 'www.site2domain.com':
// if the http_host is of a specific domain, switch the context
$modx->switchContext('site2');
break;
default:
// fallback, go to main context
$modx->initialize('web');
break;
}
The problem with this code is, I was trying to access the manager at site1.local/manager or site2.local/manager. Obviously, that causes the plugin to try and load a context other than the Manager!
While it would be possible to put some kind of conditional on the plugin code so that it wouldn't run if the manager was being requested, I simply added another local domain to use for the main web context (which I was planning to do anyway) and I can access the manager through that context just fine.