It seems there's no need to use a sub function:
let rec FindFiles dir pat =
try
Directory.GetDirectories dir
|> Array.collect (fun x -> FindFiles x pat)
|> Array.append (Directory.GetFiles (dir, pat))
with _ -> Array.empty
Oh, dear. Get ready for the next level:
let rec FindFiles dir pat =
try [| yield! Directory.GetFiles (dir, pat)
for x in Directory.GetDirectories dir do yield! FindFiles x pat |]
with _ -> Array.empty