In terms of "which of these properties uniquely determine the mailbox within the organization", the answer realistically is All of them.
AD + Exchange have multiple ways of uniquely referencing an individual user/mailbox. For instance if you search for Get-Mailbox and look at the -Identity parameter, you'll see there are 10 different ways to reference the mailbox, all of which are unique to that specific mailbox.
The main benefit of which is that some other cmdlets may only support a subset of those values, so whatever value you're able to retrieve you can likely pass it to that Exchange cmdlet to get a result.
You can get a feel for what values are available by simply running
Get-Mailbox -Identity <mailbox username> | Select *
which will show all of them, as well as the other properties available from that output.
When scripting, the only time I'd worry too much about which specific value I'm retrieving is when I want to output that value in a useful format to screen or to a log file. When passing the output to another cmdlet, either directly through the pipeline or saving it to a variable to be used later, there's rarely any need to specifically filter out the individual value you think you need. Just reference the object as a whole, and let the cmdlet extract the identity value it wants to use.
For instance, these two options get the same results :
$foo1 = Get-Mailbox -Identity MyUsername | Select -ExpandProperty SamAccountName
Get-MailboxStatistics $foo1
$foo2 = Get-Mailbox -Identity MyUsername
Get-MailboxStatistics $foo2
the only difference being that if for instance the cmdlet you were trying to run didn't support SamAccountName as an identity value (Get-MailboxStatistics does), the first command would fail, but the second would likely work as it could use any of the other identity values it did support from the $foo2
object, for instance DistinguishedName, GUID, UserPrincipalName etc to get the desired result.