Have LSM compact logic match regular merges exactly: always create Bloom filters first.  If there are any concurrent reads in the tree, they will benefit from the Bloom filters, and this avoids having different paths through the merge code.