Your dyn FnMut could be a closure that holds state which is not Send.
let rc = Rc::new(0);
let closure = move |_: &Path| { println!("{}", rc); true };
let filter = Filter(Arc::new(Mutex::new(closure)));
// The `Rc` is part of your compiler-derived closure struct
// and thus the struct (closure) is not Send
More broadly, wrapping in Arc can never make anything Send or Sync that isn't already. Wrapping in Mutex or a similar type can add Sync, but only if Send is already present.