How to skip OR if AND statement row count is not 0
You want to limit your result to one row anyway, so just write your order by like this:

SELECT * 
FROM hwr_story
WHERE question_count = '8' 
AND (lower(subcategory) = lower('True') OR subcategory IS NULL)
ORDER BY subcategory IS NULL, RAND() LIMIT 1


subcategory IS NULL returns 1 or 0, true or false. Then just sort ascending and you got it :)