The slot numbers for main and offhand, as reported by /replaceitem, are 98 and 99. However, in reality, the offhand has slot number -106 and the main hand's slot number depends on the selected hotbar slot.
To reproduce:
/replaceitem entity @p slot.weapon.offhand stone
/testfor @p {Inventory:[{id:"minecraft:stone",Slot:-106b}]}
/testfor @p {Inventory:[{id:"minecraft:stone",Slot:99b}]}
Observe how the second /testfor fails and the first one succeeds.
now feedbacks:
"successfully replaced slot slot.weapon.offhand with X * ITEM"
posibly other bug, as this also happens with all armor pieces, etc
see attached screenshot