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.