Isso funciona para mim:
> db.h.insert({x:15})
> db.h.createIndex({x:-1})
> db.h.find().min({x:20}).max({x:10})
{ "_id" : ObjectId("52fb6930253ac3dcf43b27f5"), "x" : 15 }
Seu índice pode ter um problema com ele.
A razão pela qual isso funciona é porque o índice é o contrário.
Imagine que você vira uma lista de cabeça para baixo, o que min e max efetivamente dizem é obter um intervalo dessa lista com o mínimo sendo 10 e o máximo sendo 20. No entanto, esse intervalo não existe mais, pois a lista está de cabeça para baixo. Em vez disso, o intervalo deve ser invertido para corresponder à lista.