В принципе, библиотечная Copy (IN a: ANYREC; VAR b: ANYREC) пишется легко...
Можно иметь два варианта: для случая b extends a и для случая, когда a и b имеют общий базовый тип - и копируются только его поля..