самый очевидный вариант — спуститься в нативный код
Конечно спускался, но ничего очевидного не увидел
void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem)
{
    [item->nsItem() setTarget:m_delegate];
    if (!item->menu())
        [item->nsItem() setAction:@selector(itemFired:)];
    if (item->isMerged())
        return;
    if ([item->nsItem() menu]) {
        qWarning() << Q_FUNC_INFO << "Menu item is already in a menu, remove it from the other menu first before inserting";
        return;
    }
...
Breakpoint на  qWarning - пожалуйста, но почему айтем присутствует, почему он не merged и почему вообще вызывается insertNative - раскопать непросто
Исправить баг.
Слишком прямолинейно (с грыжей на танк). Попробую сначала воспроизведется ли на простом примере