make-frame's docstring says "creates and returns a new frame, displaying the current buffer." This is not true if the buffer is considered conventionally hidden.

struct frame *
make_frame (bool mini_p)
...
    Lisp_Object buf = Fcurrent_buffer ();
    /* If current buffer is hidden, try to find another one.  */
    if (BUFFER_HIDDEN_P (XBUFFER (buf)))
      buf = other_buffer_safely (buf);

I'd prefer to have an option to be literal and allow users to make a frame on a hidden current buffer. I might submit this idea under a different bug for discussion.

-Stephane