Thanks for the details Evan. This makes more sense now. It's nice to know that Get-Mailbox isn't collecting _all_ results before passing them along the pipeline.
It's also nice to know that Export-Mailbox and Move-Mailbox are collecting objects in ProcessRecord and then processing them in EndProcess. I noticed that these two cmdlets take in a parameter (MaxThreads) indicating the maximum number of threads they can use. I noticed that the Restore-Mailbox and Test-SystemHealth also use the same parameter, so I suspect the function in a similar manner.
Are these four cmdlets the only Exchange cmdlets that collect objects in ProcessRecord and process them in EndProcess or are there others? I'm wondering if there is a way to identify cmdlets that behave this way through some property on them. I can check for the MaxThreads attribute for Exchange cmdlets but what about others? I suspect not, but it would be nice to be able to learn about this behaviour through cmdlet properties as well as documentation.