just one clarification- I am not designing API or something. MyObject and its client code both are written by me as part of my application so its not really a "big" issue I guess but I was just wondering what is good way...
No, I think you should never throw InternalError. The JDK documentation says that it is "thrown to indicate some unexpected internal error has occurred in the Java Virtual Machine". That is not a situation that you detect in your own code, so you should never throw it.
Betty Rubble? Well, I would go with Betty... but I'd be thinking of Wilma.
Good suggestion. Still you do have to catch that moronic CloneNotSupportedException (surely that should have been unchecked!) and do something with it; you certainly don't want to throw it away. My suggestion would be to wrap it in an application-specific RuntimeException subclass or even an Error subclass because something must be horribly wrong for this to happen.
Logging shouldn't be an issue, assuming you have some infrastructure at the top of the call stack that logs any unchecked exceptions that propagate all the way up.