Add a flush phase before checkpoint starts a transaction.  Only updates in between that phase and the real checkpoint need to be written inside the transaction.