You're confusing products and variants a little bit. In Spree 2.1 we have this bit of code:
https://github.com/spree/spree/blob/v2.1.6/core/app/models/spree/order_populator.rb#L21-L27
It allows you to add in a product and/or a variant. Since you've specified two id's in the products hash, it tries to add the first one (product.id) and the second one (variant.id).
I imagine that your quantity is 2 because your product.id == variant.id.
I'd recommend only adding things by variant ID so try:
populator.populate({ variants: { variant_id: variant.id }, quantity: 1 })
Spree 2.2.x has done away with some of this complexity and now populate just takes in a variant id:
https://github.com/spree/spree/blob/v2.2.1/core/app/models/spree/order_populator.rb#L13-L16