This seems to work for me:
var rng = new RNGCryptoServiceProvider();
var buffer = new byte[4];
rng.GetBytes(buffer);
uint result = BitConverter.ToUInt32(buffer, 0);
var random = MersenneTwister(result).Next(min, max);
A friend of mine ran a simulation on similar code about a million times (not kidding) and got a good distribution of numbers across the min/max range.
EDIT: Not sure what version you're using, but the implementation I have has this overloaded constructor:
/// <summary>
/// Initializes a new instance of the <see cref="MersenneTwister"/> class.
/// </summary>
/// <param name="seed">The NONZERO seed.</param>
public MersenneTwister( uint seed )
{
/* Setting initial seeds to mt[N] using the generator Line 25 of Table 1 in [KNUTH 1981, The Art of Computer Programming Vol. 2 (2nd Ed.), pp102] */
mt[0] = seed & 0xffffffffU;
for ( mti = 1; mti < N; ++mti )
{
mt[mti] = ( 69069 * mt[mti - 1] ) & 0xffffffffU;
}
}