If the value in the server is *unsigned* 16 bits, you will get signed 32 bits (Int32). It has been like for many years. This is behavior is mainly there to support VB.NET.
See: -
opclabs.doc-that.com/files/onlinedocs/QuickOpc/Latest/User%2...ypes%20in%20OPC%20Classic.html
If the value in the server is signed 16 bits, when reading you will get the same signed 16 bits (Int16) without conversion. If not, I will need a reproducible scenario, but I highly doubt that is the case.
Writing is separate. First, nothing prevents you to convert the value to the type you like. Second, assuming that were are talking about OPC Classic and not OPC UA, any OCP compliant server is supposed to make the necessary conversions upon writing, so it does not really mater what type you write in, as long as the value fits.
Best regards