@balihr, you've done all the right things from an OPC perspective (although I don't believe that you need that alteration to the OPC observer).
Your template change adds the data-gathering for that PO number and the change you made to the confirmation page's header records that value in the session prior to the session-hash value being created. That's why you don't need that OPC observer change as those 'unsets' deal with order-totals and payment- or shipping-modules that modify their session values during order creation.
What additional processing is being performed if a PO number is supplied for the order?
Bookmarks