It looks like the fake foreign key constraint against asset.copy is firing on delete in addition to insert and update. It should not be, though. That was supposed to be fixed in commit bdcb8b6acf829940e1ebbef0feabd2c60461d082, so perhaps local customization of upgrades missed that?
Geoff, can you paste the output of
\d asset.copy_tag_map
It looks like the fake foreign key constraint against asset.copy is firing on delete in addition to insert and update. It should not be, though. That was supposed to be fixed in commit bdcb8b6acf82994 0e1ebbef0feabd2 c60461d082, so perhaps local customization of upgrades missed that?