What exactly is the difference between Graphics.BeginContainer() and Graphics.Save()?

Both are used to store the current state of the graphics object so that, when localized transformations or other modifications are applied, the graphics object can be restored to it's previous state.

MSDN doesn't really explain what is the difference or when should one method be preferred over the other.

Graphics.BeginContainer() returns a GraphicsContainer, and is paired with Graphics.EndContainer(), while Graphics.Save() returns a GraphicsState, and is paired with Graphics.Restore()...

Graphics.BeginContainer Method

[...]

Graphics containers retain graphics state, such as transformation, clipping region, and rendering properties.

When you call the BeginContainer method of a Graphics, an information block that holds the state of the Graphics is put on a stack. The BeginContainer method returns a GraphicsContainer that identifies that information block. When you pass the identifying object to the EndContainer method, the information block is removed from the stack and is used to restore the Graphics to the state it was in at the time of the BeginContainer method call.

[...]

Calls to the Save method place information blocks on the same stack as calls to the BeginContainer method. Just as an EndContainer method call is paired with a BeginContainer method call, a Restore method call is paired with a Save method call.

When you call the EndContainer method, all information blocks placed on the stack (by the Save method or by the BeginContainer method) after the corresponding call to the BeginContainer method are removed from the stack. Likewise, when you call the Restore method, all information blocks placed on the stack (by the Save method or by the BeginContainer method) after the corresponding call to the Save method are removed from the stack.
Graphics.Save Method

[...]

When you call the Save method of a Graphics, an information block that holds the state of the Graphics is put on a stack. The Save method returns a GraphicsState that identifies that information block. When you pass the identifying GraphicsState to the Restore method, the information block is removed from the stack and is used to restore the Graphics to the state it was in at the time of the Save method call. Note that the GraphicsState returned by a given call to the Save method can be passed only once to the Restore method.

[...]

Calls to the BeginContainer method place information blocks on the same stack as calls to the Save method. Just as a Restore call is paired with a Save call, a EndContainer method call is paired with a BeginContainer method call.

When you call the Restore method, all information blocks placed on the stack (by the Save method or by the BeginContainer method) after the corresponding call to the Save method are removed from the stack. Likewise, When you call the EndContainer method, all information blocks placed on the stack (by the Save method or by the BeginContainer method) after the corresponding call to the BeginContainer method are removed from the stack.
Both GraphicsContainer and GraphicsState expose only the interface inherited from Object and MarshalByRefObject - which means pretty much nothing...

The only relevant line I could find is this (BeginContainer page):
The graphics state established by the BeginContainer method includes the rendering qualities of the default graphics state; any rendering-quality state changes existing when the method is called are reset to the default values.
What that means, exactly? Graphics.Save() doesn't mention it - does that mean that it behaves differently?
The design seems a bit... weird.