Acredito que seu segundo
then(..)
deve ficar mais assim:.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);
}
});
});
})