Puedes usar el $
operador posicional para hacer esto:
db.soup.update(
{_id: ObjectId("50b429ba0e27b508d854483e"), 'array.id': '2'},
{$set: {'array.$.letter': 'c'}})
El $
en el objeto de actualización actúa como marcador de posición para el primer elemento de array
para que coincida con el selector de consultas.