Hi Jordan, and thanks for a very explicit description of the domain.
In my project the different bounded contexts are deployed to the same host. It's a small project. It is to some extent built so that each BC could be separately deployed. There was the overhead with the distributed architecture that kept them all in one deployment.
Now, as they are hosted together, I have decided to go down a slightly slippery slope, and just skip the command part of the communication between process managers and AR:s. The command-part is a redundant step when we're not distributed. So the process managers acts as stateful command handlers, only that they are triggered by events rather than commands. The commands for the exact same operations still exist, so if we would like to call that AR method manually (via the command handler), we fire off the command with a button click in UI.
The write side has its top level dll with the process managers, which references all the BC-dlls. A single subscriber singleton in the processmanager dll subscribes to all events from event store, and have all router singletons referenced. These routers have all process manager types registered by the event type that they listen to. So event comes in and gets asynchronously routed out to the correct process manager(s). Process manager instances are event sourced and run synchronously.
So, the obvious problem with skipping the command step is that the process managers will have to be rewritten if any of the BCs are to be moved to separate deployments. It was a sensible decision in this case though.
I have struggled some with BC sizing too. Unfortunately I don't have any good advice. I can only say that the ones you suggest seem reasonably granulated.