Lots of them, but two key ones:
1. You have much richer libraries available. There's a
decent amount of stuff in OPAM these days, but that's
dwarfed by what you can grab out of NuGet.
2. You have a great asynchronous/multithreading story. The F# async
workflow makes it trivial to write multithreaded apps in
a similar way to C#'s async/await calls (in fact, F# is
the origin of that design), and it performs very well.
OCaml still doesn't do very well with multithreaded
programs.
You also lose some things, two of which that are most poignant to me: 1. OCaml is faster than F# for single-threaded programs.
This has nothing to do with Mono's maturity or speed as
such, but does have to do with its garbage collector,
which has not historically dealt well with F#'s allocation
patterns. I have not taken time since SGen landed to
revisit that, though, so the situation might be much
better.
2. OCaml can produce tiny self-contained binaries. Mono's
AOT gets you the self-contained easily, but you'll be
looking at relatively large executables.