The documentation for Enum.ToString
says
If the FlagsAttribute is applied and there is a combination of one or more named constants equal to the value of this instance, then the return value is a string containing a delimiter-separated list of the names of the constants.
It does not specify in what order they will be shown.
The code that does the formatting (see the function InternalFlagsFormat
in the reference source, here: http://referencesource.microsoft.com/#mscorlib/system/enum.cs) appears to always work the same way.
But, because the order isn't documented, you'll have to judge for yourself how likely it is to change. Having been burned in the past by assuming that things wouldn't change, I'd be real wary of depending on anything that's not explicitly documented.
EDIT by OP: there is an interesting comment in the code that formats the output
// These values are sorted by value. Don't change this
String[] names;
ulong[] values;
this suggests that the enum names will come out in order of the enum values. Although as you say - its not guranteed from version to version