Why does origin point change its location after joining objects?
It's likely that you selected body object first and the hand - second, then joined them with Ctrl+J. This means that origin point of the joined object was where it was for the last selected (i.e. active) object prior to joining, and in your case that was the hand. Probably the latter had its origin point where it is for the resulting object on your screenshot.

It should be possible either to:  


undo joining and join again with body object selected last in order to preserve origin point where it should be for Mirror modifier to work properly,
or reposition origin point which should be easy. In Edit mode select the center edge loop of the body mesh, snap 3D cursor to it and in Object mode put the origin point to cursor.


Also read How can I make the mirror modifier work right?

As a side note, correct the normals in your objects by Ctrl+N as this can give some unexpected results while modeling in particular. See Why are some faces in my mesh darker?