Věřím, že váš druhý then(..)
by měl vypadat spíše takto:
.then(function(book){
return new Promise(function(resolve, reject){
BookModel.find({ name: book.name }, function(err, docs) {
if (docs.length) {
reject({message: "Book already exists"});
} else {
resolve(book);
}
});
});
})