open-uriのドキュメントより、

開いたファイルオブジェクトは StringIO もしくは Tempfile ですが

とある。
取得したファイルサイズによって返るオブジェクトの型が変わるらしい。

常に Tempfile を取得したかったので、以下のようにブロックの中で Tempfile を作って対応した。

require 'open-uri'

open(url) do |f|
  Tempfile.open do |tmp|
    tmp.binmode
    tmp.write f.read
    tmp.rewind

    # tmp を使う
  end
end

参考