I can immediately name some things for which Rust is clearly better suited. Some of them are because it is not a garbage collected language.
For example, even after decades of work on the matter, garbage collection still remains unsuitable in modern operating system kernels that operate with real time constraints, and, although I can imagine constructing such a kernel in Rust, because it does not use garbage collection, I would have difficulty imagining constructing one in OCaml. (Note that if one doesn’t have anything more than the mildest of real time requirements, OCaml is probably fine for such purposes. The bulk of applications do not have such requirements.)
Memory constrained environments are also a problem for garbage collection. It is often claimed in papers that garbage collected systems operate with even better overall throughput than systems without it, but those papers rarely mention that to do this, one needs much more memory that one does for manual management. Sometimes this is not an issue, but in many environments, it is absolutely an issue. People also often pretend that budgets aren’t a thing, but if you’re selling something at a $10 price point, another $0.30 worth of parts are actually a big deal, and even if you’re selling someone a device like an iPhone, more RAM means more power which means less battery life, and thus, garbage collection is not something one uses lightly.
(None of this is to say that I don’t love OCaml. I’m doing my work in OCaml these days. However, it isn’t the right tool for every job.)