What you want to do is call event.setSESBaseURL() on every request. This doesn’t change the application-scope setting but persists it in the request context which is request-scoped.
There’s a multi-site SES interceptor on ForgeBox that does, but it’s only a couple lines of code and a preProcess method.
OK. So I already am calling event.setSESBaseURL() on every request (that’s what my portalInterceptor and salesforceInterceptor do). Your explanation is a relief because I was afraid I was going to have to refactor a lot of code. But, this still doesn’t explain the request collection mismapping I am experiencing. Any more ideas there?