Modified Coupon Collector's Problem in Java
The deviation you see from the expected results is probably in large part due to the poor use of Random. When I time your code, I get:

Average value of draws required is 23.832188
Complete in 23473.917s


If I use Random the way it should be (re)used, and convert this code:


        mCouponList.add(new Random()
                .nextInt((mMaxCouponNumber - mMinCouponNumber) + 1)
                + mMinCouponNumber);



to be:

private static final Random RANDOM = new Random();

....

            mCouponList.add(RANDOM
                    .nextInt((mMaxCouponNumber - mMinCouponNumber) + 1)
                    + mMinCouponNumber);


it completes in half the time:

Average value of draws required is 23.827381
Complete in 11552.228s


Hmm.. I was expecting this to correct the errors in the 'randomness' too, but, now I see the problem there.... you are using float, and not double. Float has relatively low accuracy. If I change this line here:


float mSumOfDraws = 0;



to be:

double mSumOfDraws = 0;


My results become:


Average value of draws required is 24.1312123



That's much closer to the mathematical expectation.

Now, about performance... your code is really slow. There's four prime reasons:


there's no need to record every draw you make in an ArrayList - it will grow large, and require garbage collection. You only need to count how many times you 'pull' each coupon.
there is no need to number the coupons from minimum to maximum - you just need to know how many there are.
You use Integer values instead of int primitives.
You have too much code in your main method - the main method is hard for the compiler to optimize - it is only ever called once.


Additionally, apart from the performance, the code style is... unconventional. You should parameterize a lot of the static values so that you can reuse the code better too.

Here is the results of my simplified code:

Average for 2 sets of 6 coupons is 24.131
Complete in 3.983s


(compared to your results with the improved Random, and double):

Average value of draws required is 24.1291875
Complete in 11.109s


The code I use is:

import java.util.Arrays;
import java.util.Random;


public class CouponClipper {

    private final int[] counts;
    private int remaining;

    public CouponClipper(int couponCount, int sets) {
        this.counts = new int[couponCount];
        Arrays.fill(counts, sets);
        this.remaining = couponCount;
    }

    public boolean pull(int coupon) {
        if (--counts[coupon] == 0) {
            remaining--;
        }
        return remaining == 0;
    }

    private static final Random RANDOM = new Random();

    public static int countRequired(int coupons, int sets) {
        CouponClipper clipper = new CouponClipper(coupons, sets);
        int count = 0;
        do {
            count++;
        } while (!clipper.pull(RANDOM.nextInt(coupons)));
        return count;
    }

    public static double averageCounts(int coupons, int sets, int iterations) {
        long sum = 0;
        for (int i = 0; i &lt; iterations; i++) {
            sum += countRequired(coupons, sets);
        }
        return sum / (double)iterations;
    }

    public static void main(String[] args) {
        long nanos = System.nanoTime();
        System.out.printf("Average for 2 sets of 6 coupons is %.3f\n", averageCounts(6, 2, 10000000));
        nanos = System.nanoTime() - nanos;
        System.out.printf("Complete in %.3fs\n", nanos / 1000000000.0);

    }


}