OK. x-create-frame in w32fns.c initializes the basic faces of the
frame, here:
/* Init faces first since we need the frame's column width/line
height in various occasions. */
init_frame_faces (f);
I suggest to put a breakpoint after that function returns, and when it
breaks for the second frame you are creating, put a watchpoint on the
frame's face cache, like this:
(gdb) watch -l f->face_cache->used if f->face_cache->used == 0
Then produce a backtrace from any time this watchpoint fires. That
should show us the culprit.