MemoryStream was recently fixed to avoid falling into a state where it could contain a negative Position dotnet/runtime#88572.
Some API docs don't mention the origin when they talk about ArgumentOutOfRangeException and only mention that the value must be between int.MaxValue and zero.
SetLength does correctly reflect that the limit accounts for the origin:
value is negative or is greater than the maximum length of the MemoryStream, where the maximum length is (Int32.MaxValue - origin), and origin is the index into the underlying buffer at which the stream starts.
We need to amend the former cases to align with SetLength's.