The EEPROM (if enabled) is automatically read when the Arduino board is reset. Any important value in it is read and stored in the local variables for use. If you add the code to save and restore the plan_bed_level_matrix[] it will happen automatically.

At that point, you would just need to do a little bit more. You still want to use and have available the G28 command. I would delete the line of code at the start of it that sets the plan_bed_level_matrix[] to unity. You don't want that changing anymore from what the EEPROM says it is.

And the other operational difference is you would have to manually do a G29, and save the results with a M500.

You also might want to move that line of code that sets the plan_bed_level_matrix[] to unity in the G28 command into the M502 code block. I don't know. That one could be argued. The reason I'm suggesting this is you need a way to get the plan_bed_level_matrix[] reset to something usable when 'restoration of default settings' is requested.