> hiding the mistake through use of Math.Min

I'm actually suggesting a feature there...  supporting partial reading of the set render targets.  The fact it makes the function harder to crash is a plus in that case.

Not saying we need this feature...  just might be worth considering.

> a debug-only assert

There assert is a separate suggestion from the `Math.Min`...  you wouldn't do both.

I see the assert as a debug only pre-condition warning you that you are using the function incorrectly.  As opposed to the `if() throw` stuff XNA does which incurs a cost to something that should have been caught during development.

With the exception alone it isn't clear who is at fault...  did the caller do something wrong or did GraphicsDevice?

One of the many things we should eventually do in MonoGame is add pre/post conditions to every function.