The name of cave_vines_body and cave_vines_head is the same ("Cave Vines") despite them being different blocks. Note that the IDs themselves are also inconsistent with similar blocks such as weeping vines (MC-213765). The translation of cave_vines_body should be changed to "Cave Vines Plant", while the translation of cave_vines_head should be left as "Cave Vines".
To reproduce this bug, run the command
/give @s minecraft:shears{CanDestroy:["minecraft:cave_vines_head","minecraft:cave_vines_body"]}Notice how both types of cave vines blocks share the same name.
Um the command that you've included seems to be broken. Whenever I try to use it I get the error:
Expected ':'
...ines_body"]}<--[HERE]