Thank you, Rohit. Yes, that does address my issue. For the benefit of any future readers of this discussion, I will give a basic example:
Graph[{Labeled[1 -> 1, left], Style[1 -> 2, Blue],
Style[2 -> 2, Gray], Labeled[1 -> 1, right], Style[1 -> 2, Green]}]
yields a self-inconsistent diagram: for the purposes of drawing the lines, the repeated edges are treated as distinct, while for the purposes of style and labeling they are treated as identical.
EdgeTaggedGraph[{Labeled[1 -> 1, left], Style[1 -> 2, Blue],
Style[2 -> 2, Gray], Labeled[1 -> 1, right], Style[1 -> 2, Green]}]
treats the repeated edges consistently as being distinct entities.
I am thankful that the EdgeTaggedGraph workaround is already present, but I remain troubled that Graph is internally inconsistent about whether the object is treated as a multigraph or not. It would have been more consistent to not introduce a new function (EdgeTaggedGraph) but rather to have an option to Graph, e.g. Multigraph->True or Multigraph->False or Multigraph->Automatic that would treat repeated edges in a consist way. But that's water under the bridge.