According to Nick, we should remove the Hash from AuditLogEntry, and only calculate it during loading and saving.
See PR https://github.com/ProteoWizard/pwiz/pull/1355
From the Hangouts conversation:
"The one thing that really worried me was the implementation of the getter for "AuditLogEntry.Hash", where it calcualtes the hash on demand the first time it is asked for.
It's hard to write code like that and have it be thread-safe. Also, it makes debugging in Visual Studio a little trickier because displaying the value in the Locals window might cause things to change.
I'm thinking the class "AuditLogHash" should not have two hashes in it. The way to do hash validation is to read in the list of entries with the hashes from the log file, and then construct a new list of entries with recalculated hashes, and ensure that the hashes in the two lists are the same."