On startup, the MetaContactList currently only registers its listeners after it has finished populating all the contacts it's loaded from disk.
This means that changes to network-stored contacts that were made when the client was offline get lost. The OperationSetServerStoredPersistentPresence implementation will get the updated contacts from the network and fire events for them, but the MCLS won't notice these changes if it's still loading changes.
The fix is to register the contact listeners before populating the UI. We must also make sure that deleted contacts are not removed until after we have populated the list. Otherwise they might get re-added.