Because it’s not really a bug… perhaps a buggy feature.
It will work if the slot index is the same in both objects…
Object1 > mat_slot[0] :: material_1 (all faces are applied to this slot)
Object1 > mat_slot[1] :: material_2 (no faces here)
Object2 > mat_slot[0] :: it can be anything… we just care for slot2
Object2 > mat_slot[1] :: material_2 (all faces are applied to this slot)
This will work both with the modifier active and applied. 
edited: Note that this way also let’s you use multiple materials from both objects… for example Object2 can have one material per face, and those materials are present with at the same slot indexes from Object1, it will work flawlessly.