Okay, I found the answer...DavidA's advice was correct but missing the crucial part: when you set up the MappingMongoConverter dealio with the null type mapping business, it not only stops writing the "_class" pollution, but also stops attempting to read it. This causes it to fall back to the type you provide when attempting to retrieve your documents from Mongo.
I haven't seen anywhere that anyone actually mentions that. :)
So, for anybody else running into this issue, here's the XML configuration I used (adapted from something I found somewhere else here on StackOverflow, but I lost the link, sorry):
<mongo:db-factory id="mongoDbFactory" host="${mongo.host}" port="${mongo.port}" dbname="${mongo.dbname}"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mongoConverter" />
<property name="writeResultChecking" value="EXCEPTION" />
</bean>
<bean id="mongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey"><null/></constructor-arg>
</bean>
<bean id="mongoMappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
<bean id="mongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mappingContext" ref="mongoMappingContext" />
<property name="typeMapper" ref="mongoTypeMapper"></property>
</bean>
And then in the Java code:
//build query object
UnifiedProduct mpp = mongoTemplate.findOne(query, UnifiedProduct.class, "collection-name");
...which results in the UnifiedProduct class I wanted, and no annoying "_class" pollution.