Here's some new info on the beach bug: I've been playing around in Zone Doctor. Turns out every map has a "priority set" byte that determines transparency for all of the layers of the map, and the Solitary Island beach uses priority set 14.
The info on priority sets is located at C0/FE00, and is three bytes per set. The first byte is written to register $2131, a color math register that specifies what color math function is used and which layers are subject to color math. The second and third bytes are written to registers $212C and $212D, the main and sub screen designation registers, respectively. Check out
this page for details.
The problem with priority set 14 is that it enables transparency for the sprite layer and BG layer 1 (the sand underneath the waves), and transparency on the sprite layer only works on sprites using palettes 4-7 (which is why Cyan, Shadow, Setzer, Mog and Umaro appear fully submerged). I've tried all the others and found that the only alternative sets that correctly show translucent water are 1, 7, 8, 10 and 18. 7 and 8 show all sprites fully above the water (which is not good for the fish), while 10 submerges only the fish and any part of your character that is close enough to the fish (it's a little hard to explain, but it's also not correct). Meanwhile, 1 and 18 show all sprites fully submerged.
I think half of the fix for this bug will be changing the priority set to one of those two, and the other half will be finding a way to ensure that characters' torsos and heads are above water while the legs are below the surface.

Actually, priority set 10 has the same problem as priority set 14: it completely submerges certain characters.

Unfortunately, there's a major flaw: the game is set up so that layer 3, which shows the waves, will be displayed on any map either over all sprites or beneath all sprites, regardless of the sprite's priority. That makes it impossible to display different parts of different sprites both over and under the surface without enabling transparency on the sprite layer, which will force a full submerge on characters whose palette ID is 4+.