First, I usually do hourly up to x hours or just hourly, but I do some fixed bids too.
In general fixed bids are preferable for a customer if the scope is very clear, and they are preferable for the consultant if the price is higher than the hourly would be. I would say that most of my fixed bid work brings me more per hour than my hourly rate. What I am doing essentially is saying that I will accept the risk of cost overruns for an up-front price, sort of like insurance. Sometimes they go badly over, but enough of the time they don't that I am ok. This is particularly helpful where cost overruns are rare but can be quite costly.
If I agree to drop to per hour, generally the estimated goes down, but the customer assumes the risk of cost overruns.
For example, I charge the same to migrate databases from previous versions of LedgerSMB to current, per database, as I do for one hour of consulting time. This normally takes me half an hour or so, but there are cases where a customer has done something that causes significant problems with data integrity checks and can take five or ten hours to fix. Billed hourly then most customers would pay half what I charge for this, but a few would pay up to 10 times. The fixed bid lets me spread that risk around and give the customer a guarantee that might otherwise not be available.
On the other hand, longer, open-ended projects are typically billed hourly.