Just to ensure we're on the same page, I'll assume classic customer - invoices model.
1 customer can have multiple invoices. To simplify the whole process, let's assume that balance is a sum of unpaid invoices minus the sum of paid invoices (let's not go into debate about the table design, I'm just using this as an example).
So, to obtain John Doe's balance, we'd have to use aggregate functions to calculate the balance.
So, why not use a trigger that will update customers table with the sum of unpaid - paid?
That way, when we want to find out someone's balance, we don't have to calculate what the current sum is. Or, even better - we want to know the total that we are being owed - we can run a sum on customers table rather than sum on invoices table - it's less rows, hence it will be quicker.
Now, to answer the questions:
1) Recalculation is triggered by a trigger, on before insert, assuming that invoice isn't updated. If yes, the same procedure - trigger controlled.
2) I am not sure what you mean by not working properly. Yes, there are number of reasons why something can go wrong, but that's why we have the transactions available. As for the logic itself, if I am mistaken here - please, do correct me as I'd also like to know if it's wrong.
3) No, it isn't.