AuditUpdateOfExistingEntity is called after the successful entity update and before the commit, so the save already took place, that's why you can't rely on entity.IsDirty or entity.Fields[].IsChanged.
If the runtime is already inside AuditUpdateOfExistingEntity you can assume that the entity was dirty and that's is why you are auditing it. For the fields, you should audit them at AuditEntityFieldSet method and save them in a list of changes so you can use that list at AuditUpdateOfExistingEntity to save the full list of changes. This is illustrated in the Aduiting example you can download at http://llblgen.com/Pages/ListAdditionalDownloads.aspx#6