O Writer Networkx Gexf gera um ID de borda - números inteiros a partir de 0 - se não for especificado. Desde que você adicionou uma segunda borda sem um ID (Edge 1,2), foi usado um ID de 0 que colide com o seu primeiro ID da borda.
Pode ser um bug e certamente causa um problema no seu caso de uso. Uma solução alternativa é definir explicitamente um ID de borda quando você adicionar o nó.
In [1]: import networkx as nx
In [2]: G = nx.read_gexf('first.gexf')
In [3]: G.edges(data=True)
Out[3]: [('1', '0', {'id': '0'})]
In [4]: G.add_edge(1,2,id=1)
In [5]: G.edges(data=True)
Out[5]: [('1', '0', {'id': '0'}), (2, 1, {'id': 1})]