Is your script listening to or animating the object's old owner? It may seem like llGetOwner is broken, but this is not the case. Functions like llListen and llRequestPermissions remember the key that you passed to them and continue to act on that person even if ownership of the object changes. If you set up a llListen to listen for the owner of an object, the script will continue to listen to that specific person after ownership is changed. If you llRequestPermissions to animate the owner of an object and ownership changes, llStartAnimation will continue to animate the old owner of the object. If calling llResetScript in the on_rez event is unfeasible, consider checking the CHANGED_OWNER in the changed event to detect a change in ownership, and reinitialize llListens and call llRequestPermissions on the new owner as needed.

You can retrieve the owner of a specific object other than the one containing the script with llGetOwnerKey.

Q:What happens if I call llGetOwner() in an object owned by a group (deeded)?A:The group's UUID will be returned.

Q:How do I get the owner's name instead?A:If the owner is in the same sim as the object at the time it's called, (IE, if your script is within an attachment) use llKey2Name. Otherwise, you need to use llRequestAgentData and the dataserver event, which takes longer and is more complicated.

Q:Does llGetOwner work correctly in a child prim? I'm getting NULL returned when I try to call it.A:Yes. The problem lies elsewhere in your code.