Unfortunately, there is no elegant way to this. This is actually a recent community ask posted to Microsoft as a new feature.
JediSQL points out the difficulty of capturing the old data plus the SQL that's doing the UPDATE.
https://www.sqlservercentral.com/Forums/1877279/BEFORE-TRIGGER-Idea-Posted-to-Microsoft-Connect
https://connect.microsoft.com/SQLServer/feedback/details/3127222/before-trigger-behavior-with-execute-original-statement