Not a thorough review, but two things jump out at me as problematic with ImmutableQueue:
Your Reverse method looks wrong: it doesn't do anything if front isn't empty, and doesn't reverse if it isn't. I would have expected:
let reverse () =
There are no tests for this method.
Some of the methods of ImmutableQueue seem to ...