I either contract for a fixed price and stick to it - and only those jobs that can be well defined - or contract for an hourly rate and expect the client to stick to it. They can't have it both ways. If you're going to protect them from the cost of an over-run, make sure you've covered yourself for it.
The client can choose anytime to reduce the scope, stop the project entirely, or limit me to billing no more than X amount per week.
The point of a fixed price is to protect the client's budget and I take the risk, charging for it in my price. The point of billing time and expenses is to allow the client flexibility in the scope and direction of the project, protecting me against changes and unknowns, for which the client takes the risk but with the available "outs" I noted above.
Once, when I had to discard some work through my error, I credited the client some hours at his request to retain his good will, but I normally expect to be paid for hours worked if that was the upfront agreement.
As an analogy, I once owned an old house. When I'd put jobs out for estimates, the contractors understood "estimate" to mean what I would call a "bid" - an upfront agreed-upon price. And I'd ask them "Is this a bid or an estimate?" It was always a final price. Old houses being what they are - with each task bound to expose another task needing doing first - and the contractors being neighbors and/or people I might like to hire again, I'd offer to let them take the job on a time & materials basis. I'd ask for an estimate but with the understanding that it was just that, an estimate, but that they'd bill - and I'd pay - their labor and materials cost. They were almost always relieved to not have to allow for unknows, and I usually got jobs done for less, but in any case, for the real costs without just-in-case padding.
You and your client choose the working arrangement that best seems to fit the job, and then stick with it. If it really starts looking likely to go south for either of you, sit down and re-negotiate.