Nothing stands out as wrong with this code so there must be something else at play here. Is there a particular scenario where it doesn’t update? Can you reproduce the problem? If so then you can trace through it with the debugger. Also is there any sort of transaction at play where there might be a partial rollback?
You mentioned in your subject that you are using after_save even though the code uses before_validation. I think either would work or also before_save. I would probably choose either before_save or after_save just so if validation of the parent fails you didn’t spend the time loading the child objects.
The docs do mention that it’s not a good idea to modify the association before save but I haven’t used the autosave module before. I think you’d either want to move that calculation into the BillEntry model or turn off autosave and actually update the BillEntry records with your save.
You should avoid modifying the association content before autosave callbacks are executed. Placing your callbacks after associations is usually a good practice.