How to register a popover panel that doesn't show anywhere else in the UI
Add 'INSTANCED' to panel options
Edit   Credit to @Nilson  (finally twigged)
How to hide a panel that appears twice?

I found the solution .. and it was very simple. Just use: bl_options = {&quot;INSTANCED&quot;}. The popover menu is just an instance of the panel


If the 'INSTANCED' option is added to the panels bl_options  the panel is not drawn directly in the UI, it is rather instanced via the popup call.
PLEASE Note. If the region is set to 'UI' a &quot;Misc&quot; category tab is added, which when selected shows no panels (No others  in region and uncategorized) and  (for me) segfaults blender when selected.  The 'WINDOW' region appears a safe bet.
Test script using the Text Editor &gt; Templates &gt; Pythone &gt; UI Panel Simple script modified to add to view3d UI (N) region. Making only the options edit confirms the panel no longer renders in the properties region.
import bpy


class HelloWorldPanel(bpy.types.Panel):
    &quot;&quot;&quot;Creates a Panel in the Object properties window&quot;&quot;&quot;
    bl_label = &quot;Hello World Panel&quot;
    bl_idname = &quot;OBJECT_PT_hello&quot;
    bl_options = {'INSTANCED'}
    #bl_options = {'INSTANCED', 'DRAW_BOX'}
    bl_space_type = 'VIEW_3D' # 'PROPERTIES'
    bl_region_type = 'WINDOW'
    #bl_context = &quot;object&quot;

    def draw(self, context):
        layout = self.layout

        obj = context.object

        row = layout.row()
        row.label(text=&quot;Hello world!&quot;, icon='WORLD_DATA')

        row = layout.row()
        row.label(text=&quot;Active object is: &quot; + obj.name)
        row = layout.row()
        row.prop(obj, &quot;name&quot;)

        row = layout.row()
        row.operator(&quot;mesh.primitive_cube_add&quot;)

def draw(self, context):
    self.layout.popover(&quot;OBJECT_PT_hello&quot;)
def register():
    bpy.utils.register_class(HelloWorldPanel)
    bpy.types.VIEW3D_PT_view3d_cursor.prepend(draw)


def unregister():
    bpy.utils.unregister_class(HelloWorldPanel)


if __name__ == &quot;__main__&quot;:
    register()

Tip. If set an enum to a garbage value can look at the error message to get allowable values
TypeError: validating class: enum &quot;FOO&quot; not found in 
('WINDOW', 'HEADER', 'CHANNELS', 
'TEMPORARY', 'UI', 'TOOLS', 'TOOL_PROPS',
 'PREVIEW', 'HUD', 'NAVIGATION_BAR',
 'EXECUTE', 'FOOTER', 'TOOL_HEADER')

Fwiw 'HUD' adds panel to operator redo panel.