Thanks for the link! It's pretty much what I expected. I agree with that SO reply, but I'm not really sure if it applies to the interface of a random number generator. Expressing "I want a dice roll between 1-6" as Random(1, 6) just seems more natural to me.
Ah, but the thing is that random number generators are not exclusively written to simulate dice rolls. When you are writing a random number generation library you usually want to go as generic as possible with your API in order to give the user the flexibility he needs to implement his own logic off of your random number generation routines. That can mean a generic Random(min, max) with the usual min/max convention which has effectively nothing to do with dice rolls. But you can implement dice rolls on top of that by writing a RandomDiceRoll(numSides) function that uses those Random functions, e.g. via Random(numSides) + 1. In and of itself, that Random() function has no relation to dice rolls, and indeed what you find "natural" for dice rolls will feel "unnatural" for things like selecting an array element at random, e.g. for shuffling a collection. That's because the function isn't designed for any specific task, and a min/max convention ultimately had to be picked.
In short, that the Random() function does not "favor" dice rolls is not a design flaw, it just means that you are meant to implement a dice rolling function using it instead of directly treating it as a dice-rolling function (because it isn't one).
And on that note, really, any random number generation library worth its salt should divide its API into a low-level random bit generation module (deterministic random bit generator, DRBG), a distribution API on top of that to generate different types of distributions like discrete [A, B) distributions, reals from 0 to 1, normally distributed numbers and so on, and finally perhaps (if applicable) a convenience API that performs some common tasks such as dice rolls, uniform choice from a set of values, shuffling, etc, etc. In that regard, I don't consider the System.Random class a particularly shining example of good design, but then most users are happy with a seed and a nextInt() function, so...