The WT_CLEAR of *ref shouldn't be needed, should it?  (If you want it for debugging, no problem.)

I had to stare at the if/else for a minute, doesn't newref->page have to be set if WT_REF_LOCKED is the state?

Here's my suggestion:

```
        /* Check the state. */
        WT_ASSERT(NULL,
            ref->state == WT_REF_LOCKED && ref->page != NULL ||
            ref->state != WT_REF_LOCKED && ref->page == NULL);

        /* Move a ref from the old tree to the new tree. */
        newref = state->ref++;
        *newref = *ref;
        if (newref->state == WT_REF_LOCKED) {
                WT_LINK_PAGE(state->current, newref, newref->page);
                newref->state = WT_REF_MEM;
        }
```