let rec fix f = f (fix f) だと、f が渡された途端、

f (fix f)
↓
f (f (fix f))
↓
f (f (f (fix f)))
↓
f (f (f (f (fix f))))
↓
f (f (f (f (f (fix f)))))
↓
あぼーん

関数を返そうとはするが、fix を展開しようとして無限ループ。

let rec fix f = fun x -> f (fix f) x だと、f が渡されても、

fun x -> f (fix f) x

x が渡されるまで fix は展開されない。