Jeg tror på din anden then(..)
burde se mere sådan ud:
.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);
}
});
});
})