Because your original is probably detached.
Sure, it's detached but it's passed to a session bean that calls merge then refresh. Refresh does not return an up-to-date instance as merge does; it simply sync's the database record with the instance you passed as an argument.
Insofar as the only difference between the original and the merged entity is the version string (notwithstanding triggers that might change state) I assume my solution is correct: just transfer the new version number from the merge return entity to the original. It just feels icky.