Q:

What is the difference between these two class instances?

There are noticeable difference between Moped::Collection object instances. The inspection of Item.collection object is as follows (with line ending added):
#<Moped::Collection:0x007fb381e3ed10
  @database=#<Moped::Database:0x007fb381e3fa30
    @name="production_datagatherer",
    @session=<Moped::Session
      seeds=[
        <Moped::Node resolved_address="22.22.22.22:43700">,
        <Moped::Node resolved_address="22.22.22.22:43700">
      ]
      database=production_datagatherer
    >
  >,
  @name="items"
>

Item.collection Moped::Collection object has following instance variables:
@database: Moped::Database object
@name: "items"

@database variable has the format #<Moped::Database:0x007fb381e3fa30 while @session instance variable has a Moped::Session object but it is formatted differently.

Is the value of @session not an object? 
What kind of variables does it have if they aren't instance variables (seeds and database).

A:

It is actually much simplier.
Moped::Session implements inspect method
def inspect
  "<#{self.class.name} seeds=#{cluster.seeds} database=#{current_database_name}>"
end

that's why it looks different. By default inspect includes instance variables as it happens with Moped::Collection.
inspect method is called on an object when it is printed with p method, or is returned to console. You can read about inspect here

