It seems that the problems come from the call to mod.delete_all_unused_submodules().
I think it deletes submodules  of the Sequential submodule added as they don’t appear in the graph even though the call_module node calling the Sequential submodule use them internally.
Putting it after the second symbolic_trace seems to solve the issue.
import torch
import torch.fx as fx
import torch.nn as nn


class MyModule(nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, x):
        return x


class MyOtherModule(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Conv2d(24, 32, 3)

    def forward(self, x):
        x = nn.functional.relu(self.conv(x))


def insert_mod_after(mod: fx.GraphModule, from_idx: int, insertme: fx.GraphModule):
    mod.add_submodule('inserted', insertme)
    cutoff_node: fx.Node = list(mod.graph.nodes)[from_idx]
    next_node: fx.Node = list(mod.graph.nodes)[from_idx+1]

    with mod.graph.inserting_after(cutoff_node):
        new_node = mod.graph.call_module('inserted', (cutoff_node,), {})

    next_node.replace_input_with(cutoff_node, new_node)

    mod.graph.eliminate_dead_code()
    mod.recompile()
    mod.graph.lint()
    mod = fx.symbolic_trace(mod)
    mod.delete_all_unused_submodules()
    return mod


mod = fx.symbolic_trace(MyModule())
other = fx.symbolic_trace(MyOtherModule())
new_mod = insert_mod_after(mod, 0, other)

I would like these type of ordering to appear in the documentation as it is not clear in which order to call Graph.eliminate_dead_code(), Graph.lint(), GraphModule.delete_all_unused_submodules(), GraphModule.recompile().