Yes, I agree. SaveState() should preserve every mutable setting that affects subsequent drawing, including Opacity, and RestoreState() should also restore the values exposed by the corresponding Graphics properties.
I’ve logged this as a bug and included an audit of all mutable graphics state for both desktop and web canvases:
https://feedback.objo.dev/bug/1465