というか、dup しなかった場合は

def foo(str)
 str.force_encoding('BINARY')
  ...
 hoge(str)
end

の ... の部分にいるときに、別スレッドで str_orig.force_encoding('Windows-1252') とかされたら
hoge には Windows-1252 の str が渡るんだよね?