¿Qué tan bueno es este método para generar números aleatorios?

Estaba buscando en Google RNGCryptoServiceProvider con ejemplos sobre cómo limitar el rango entre Max y Min, y aún obtener una distribución uniforme. Antes de usar el operador de módulo, pero a veces obtengo valores extraños (por encima de Max) ... De todos modos, este código (crédito a desconocido) genera Random con una nueva semilla de RNGCCryptoServiceProvider, cada vez que se llama al método. ¿Qué piensan ustedes?

public static int GetRandom(int min, int max)
{
  byte[] b = new byte[sizeof(int)];
  new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
  int i = BitConverter.ToInt32(b, 0);
  Random r = new Random(i);
  return r.Next(min, max);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta