Fix bug where control register write could be applied even when rolled back

This would happen if there was a control register move immediately after a branch.
Also cleaned up logic a bit for various write types.