Nope, that’s pretty much the way.
If you really, really want to make this shorter and less cluttered, and if you face similar situations multiple times in your codebase, you could make yourself a special operator for combining predicates:
let (.&&.) f g c = f c && g c
Then you can use this operator in your filter:
|> Seq.filter (needSpecialDocument .&&. wantToMoveTo)
But base on my own experience I wouldn’t advise this. You make the program slicker and cooler looking, but you’re losing some readability. Now whoever reads your program will have to look up the meaning of .&&.
. Programs are read more often than they are written.