It is possible to have overlapping blocks. For instance you can have a block on your user as well as a hard block on an IP address (that also applies to your user). Likewise, you can have an IP Range block that could apply to your IP address and (possibly) your user (if it's a hard block).
BlockManager::getUserBlock() (formerly User::getBlockedStatus()) picks a block to use and that is what gets used. This becomes a problem when overlapping blocks have different configuration.
For instance, if a user is partially blocked from Saturn and IP address (hard block) is partially blocked from Mars, The user should be blocked from both Saturn and Mars. Likewise, if either of these blocks are sitewide blocks, the user should be sitewide blocked.
Likewise, if a user is IP blocked and has an overlapping IP Range block, the user should have all of the restrictions of both blocks.
BlockManager::getUserBlock() should collect all of the blocks. If it finds more than one block, it should merge any restriction properties (email, user talk, page/namespace restrictions) from the blocks together. The merged block should not be able to be saved.