Strongly disagree. This is a failure of communication. If you're billing by the hour, your client should have a general idea of how long something will take. A lower bound and an upper bound. Time-box all tasks.
As soon as you know you're going to break through the upper bound, stop work, inform the client, provide a new estimate, and let them make the call.
Eating the difference defeats the purpose of working hourly.
> you may not know what your rate should be. In these cases, you may want to consider flat rate arrangements.
Disagree with this as well. If you don't know what your rate should be, how can you name a flat rate? You should know what your competition is asking for and ask for slightly more, because you're better.