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