> In other words, the finalizer is run before the call to touch.  Is
> this the expected behavior? 
No.  It looks like a bug, based on the spec for touch at
  http://mlton.org/MLtonFinalizable
  touch v
    ensures that v's finalizers will not run before the call to touch.