Even though only a few underwater drops are actually pickpocketable, the internal item database classes them as generic drops rather than non-pickpocketable (or maybe they should be conditional since I don't think they can be yellow-rayed either).
For example:
properly models that the fishy wand doesn't drop unless you unlock it at Grandpa, but the scale and fish meat aren't pickpocketable and can't be yellow-rayed.
For example:
Code:
> ash item_drops_array($monster[school of wizardfish]);
Returned: aggregate {item drop; int rate; string type;} [3]
0 => record {item drop; int rate; string type;}
**drop => dull fish scale
**rate => 15
**type =>
1 => record {item drop; int rate; string type;}
**drop => fishy wand
**rate => 0
**type => c
2 => record {item drop; int rate; string type;}
**drop => glistening fish meat
**rate => 5
**type =>
properly models that the fishy wand doesn't drop unless you unlock it at Grandpa, but the scale and fish meat aren't pickpocketable and can't be yellow-rayed.