@raggio, Hi, welcome to the forum!
Please read How to get the best out of this forum if you haven't done yet.
For b/w e-paper displays that support differential refresh GxEPD2 makes sure that the content on the screen and the current and previous buffers of the controller are equal after the update has been completed, be it partial or full. This allows next partial wherever it may happen on the screen without the need to write old data. Before the first update this is not true, screen and buffers may differ, therefore the first update (initial update) needs to be a full update.
With your deep sleep you only need to persistently store a flag to remember if the initial update has ever been done, as long as you keep supply to the panel.
See also the comments in GxEPD2_BW.h for the init() method with additional parameters:
// init method with additional parameters:
// initial false for re-init after processor deep sleep wake up, if display power supply was kept
// this can be used to avoid the repeated initial full refresh on displays with fast partial update
// NOTE: garbage will result on fast partial update displays, if initial full update is omitted after power loss
// reset_duration = 20 is default; a value of 2 may help with "clever" reset circuit of newer boards from Waveshare
// pulldown_rst_mode true for alternate RST handling to avoid feeding 5V through RST pin
void init(uint32_t serial_diag_bitrate, bool initial, uint16_t reset_duration = 20, bool pulldown_rst_mode = false)
Hope this helps you.
Jean-Marc