Greetings from 8 years in the future! I found this thread where someone described by exact problem, and had to stop by and share my solution.
At the end of USEREXIT_SAVE_DOCUMENT_PREPARE simply make a call to the function SD_PARTNER_UPDATE. This function module just takes in the xvbpa and xvadr tables (and their y counterparts) and puts them where they belong in memory.
CALL FUNCTION 'SD_PARTNER_UPDATE'
* EXPORTING
* F_VBELN = ' '
* OBJECT = 'VBPA'
TABLES
i_xvbadr = xvbadr
i_xvbpa = xvbpa
i_yvbadr = yvbadr
i_yvbpa = yvbpa
* I_XVBPA2 =
* I_YVBPA2 =
.