How to keep a record of changes to a custom field?

Your best option here is to create a second Custom Field and store an Array of all the versions that have been used together with the date of the update and the user who commited the changes, acually everything you need to know.

Hook into the save_post action and compare the Value of the Custom Field with the last Value of the “HistoryArray”. If it is different, push another Element into the Array and update the HistoryArray.