Partially the behavior may be correct - the documentation about type "proc" says:

<b>proc</b> means that the command is found in <b>dynamically</b> created procedure body.

So I assume, in case it is constructed "statically" from source and compiled (like TCL_LOCATION_BC), info frame just searching the type up to the source and returns it wrapped to the origin type (e. g. using TclGetSrcInfoForPc).

But the upper case (difference by [info frame 0] and [info frame [info frame]] may occur because of the in-place change of interpreter frame levels inside InfoFrameCmd, so it is correct by direct invocation (0) and wrong by 2 commands sequentially. Additionally this is ugly and should be rewritten. WiP.