petsc_save_checkpoint() does not include the recent XDMF updates for creating vertex and cell datasets; it only saves datasets based on the MeshVariable degree.
Do we need two separate functions for checkpointing (write_timestep() and petsc_save_checkpoint())?
If both are required, the recent XDMF updates should also be added to petsc_save_checkpoint().
For easier maintenance, it may be better to keep a single checkpointing function.