The current version of pydicom stores the original string version of
some VR types (like "DS") so they can be written back exactly.
Unfortunately when one item in a list like this is changed, it doesn't
recognize that and writes the original string out.
The work-around is to set the entire list rather than a sub-item, so
something like this should work for your case:
orient = plan.ImageOrientationPatient
orient[0] = -1 * orient[0]
plan.ImageOrientationPatient = orient
The key is the last line which sets the list itself, forcing pydicom
to recognize the change.
This problem should go away with a change to using python's Decimal
type, which is on the issues list for a near future version.
Hope that helps,
Darcy