so I think your problem breaks down into 2 parts;
a) you want to "store" the record, before the save, so you have something to compare to and
b) you need to do the comparison and then build your email from that.
So let's do the easy bits first. You don't actually have to create a copy - one exists already. If, for example your file field is
Inv:Value
then you can access
p_web.GetSessionValue('_old_Inv:Value')
p_web.GetValue('_old_Inv:Value')
to find the original value before the change.
In terms of constructing the email - there's no method to make that easy for you - you just need to compare all the fields which may have changed, or which you want to report have changed.
eg, in Post-Update
if p_web.GetValue('_old_Inv:Value') <> inv:Value
! add to email
end
cheers
Bruce