On 3.6, a $rename operator applied to a destination field that already exists, and has the same value as the source field, will not update that field. On 3.4, the field type is changed as expected.
db.test.insert({to:NumberLong(100), from:100});
db.test.update({},{$rename:{from:"to"}});
db.test.findOne()
// 3.6: { "to" : NumberLong(100) }
// 3.4: { "to" : 100 }