The first 6.5 is a double, the round() that takes a double argument is invoked. The second one is a float, and the round() that takes a float is called. In both cases, the subtraction is done by the compiler at compile-time, so round() is invoked directly.
The reason the second one prints "false" is because a float is only 32 bits, and doesn't have the precision to distinguish between MIN_VALUE-6.5 and MIN_VALUE; they're not far enough apart on the number line. Double, on the other hand, is 64 bits, and can indeed distinguish between these values.