I just happened to have completed a series of experiments on getting an object to float:
(If anyone else has tried something, I, too, would like to hear it.)
I tried 5 ways to script a physical object to float in water:
1. Simply giving the object the property of "llGroundRepel"
2. Simply giving the object the property of "llHoverHeight"
The next three methods all used a frequently called TimerEvent which checked the object's position versus the water level (using llWater):
3. used llSetForce to move the object up if below water, stopped applying force if above water
4. same thing as 3, but used llMoveToTarget
5. same thing as 3, but used llSetBuoyancy
The best result of all was using the llGroundRepel function. Stick this code in a *physical* object and it behaves normally on land, but floats (half in and half out) in the water:
state_entry()
{
llGroundRepel(0.1,TRUE,1);
}
That is all you really need, but there are two drawbacks. One, the object does not bob up-and-down upon initially falling into water. It, somewhat unrealistically, instantly stops at its prescribed height in the water (but it is still better than the other 4 methods). Two, an object floating in the water using this method sees no friction...so, any momentum in the X or Y direction means the object glides along indefinitely! I found a cheap fix by adding a timer event to stop the object's momentum every so often:
default
{
state_entry()
{
llGroundRepel(0.1,TRUE,1);
llSetTimerEvent(30);
}
timer()
{
llApplyImpulse(-llGetMass()*llGetVel(),FALSE);
}
}
There may be a better/more elegant way to stop the object. Please let me know if anyone has any ideas.
--
As for the other methods of floating:
llHoverHeight worked almost as well as llGroundRepel, except that when the object was thrown over a cliff into a lake, the object slowly fell into the water in a weird, hovering way...it looked most unnatural. llGroundRepel did not have this problem.
the other 3 methods (3, 4,and 5, above) all had the same problem:
The object ended up endlessly bouncing far below the water's surface and then flying high above the water and then back down. It was comical!

The three different methods behaved slightly differently, but I forget the details.
This ended up being a long post! Anyway, good luck!