Debe usar el operador $ para actualizar un subdocumento en una matriz
Usando contacts.$
apuntará a mongoDB para actualizar el subdocumento relevante.
db.users.update({_id: ObjectId("5500b5b8908520754a8c2420"),
"contacts._id": ObjectId("550199c6fe544adf50bc291e")},
{"$set":{"contacts.$":myNewDocument}})
No estoy seguro de por qué está cambiando el _id
del subdocumento. Eso no es recomendable.
Si desea cambiar un campo en particular del subdocumento, use contacts.$.<field_name>
para actualizar el campo particular del subdocumento.