UPDATE: I thought I will post my findings as an answer. Reflection proved too complex in terms of development effort, tracking run time errors etc. I remember doing a different approach using 2 different processes when faced with a similar situation long time back (Thank you Brandon).
This is the plan: Nothing elegant but easier in terms of development and troubleshooting. Since it is a one time job, we just have to make it work.
Host a remoting process (which i call the server) having the new version of the application. A remoting client has references for the older version.
Remoting client instantiates and loads the objects with data required for migration.
Convert the old objects into common serializable objects and pass as parameters to the server.
Remoting Server uses the common data to instantiate and load the new objects. Invokes the functions on the new types to persist their data.