Original comment by @astefan:
A query like SELECT SCORE(), * FROM library WHERE match(author,'dan') does calculate and output the score of the results, while something like SELECT SCORE(), * FROM library WHERE match(author,'dan') AND (page_count IS NULL OR page_count > 200) doesn't.
The reason seems to be the query in the first case it's simply creating a match while the second one is wrongly wrapping the same match query in a bools filter (which is not calculating the score by default). While ok to wrap it in a bool, but maybe not inside a filter. I think the same outcome can be obtained by using must statements instead of filter ones only when the scoring is needed (the presence of SCORE() anywhere in the query)?