A colleague set me up!
For the record, the solution was to change from:
adatac = ad.concat([adata1, adata2], axis=0, join="outer", merge="first")
to handle the var merge on its own, as in:
# merge obs & X (and var, but we discard that)
adatac = ad.concat([adata1, adata2], axis=0, join="outer", merge="first")
# merge var
merged_var = pd.concat([adata1.var, adata2.var], join="outer")
adatac.var = merged_var[~merged_var.index.duplicated()]