Você escreveria isso em C# assim:
var newAddress = new BsonDocument
{
{ "street", "New street" },
{ "city", "New York" },
{ "country", "USA" }
// ...
};
var query = Query.EQ("addresses.city", "New York");
var update = Update.Set("addresses.$", newAddress);
var result = customerCollection.Update(query, update, UpdateFlags.Multi);
Isso parece uma atualização perigosa de se fazer; você está substituindo um endereço com base apenas na correspondência da cidade? A consulta está funcionando corretamente no shell do mongo?