A bug, or a programming oversight ...
But it is also a usability bug -- it allows the user to inadvertently override Admin decisions, and Admin can't stop it. We do need a multiple-select box, but we also need an option to disable category selection by users.
These links are not orphans, they are in multiple categories. The only way we can stop users from trashing hours of work is to stop them modifying anything. Suppose the link is in 5 categories -- after the user has updated the description, or whatever, it is in only one category. All we want to do is allow users to modify their links without being compelled to reduce a multiple category link to a single category link.
Here is the flaw in the logic -- if we remove the input field for the CatLinks.CategoryID, the script complains that the link has no category -- but it doesn't check to see if it is actually true -- it only looks at the form input, not what is already in the database.
Alternatively, if the link is displayed in a category it cannot be an orphan, so there is no need to check. Absence of a value for CatLinks.CategoryID can be justified as an error in Add.pm, but never in Modify.pm -- the link should simply retain the values it already has.
I have tried to find the code where the superfluous check occurs, so I can comment it out, but it is too much for someone who is not an experienced Perl programmer.