Hi Martin,
I then calibrate in Maxim DL, and save them as 32bit integers.
This is your problem.
I have been struggling with EXACTLY this problem, but because I was using data saved by Meade's "Envisage" capture program, for the DSI range of cameras. The problem is that Envisage saves in 32-bit Float format - which is similar to the way you are saving in Maxim.
With your 32-bit data, considering that your CCD is most likely only digitising to a 16-bit (unsigned integer) range, PI is 'trying' to interpret the data as best as it can. PI does not 'understand' that you actually only have 16-bit data, but that it is stored in a 32-bit environment. It just assumes (incorrectly, as it happens) that your data is all just concentrated in a VERY SMALL part of the MASSIVE integer 32-bit range. In fact the 16-bit range is actually only 1/65536th of the 32-bit range and, in reality, your data is most likely to be concentrated in the bottom 25% of that range.
So, when PI tries to scale your data it just 'assumes' that the data was 'all black' - because that is what the incoming data values are telling it.
However, because you are using Maxim, you will have (hopefully) more flexibility than I did with Envisage. Just ask Maxim to save the images in 16-bit Unsigned Integer FITS format. And, if that option is not available, then I am sorry, but that would be the final evidence that I, personally, would need to tell me that Maxim just isn't worth any part of it's purchase price.
But, even if that IS the case, all is not lost. PixInsight does actually have a simple, if convoluted workaround, that - once you understand it - is actually very easy to implement.
You should take the time to read this thread
http://pixinsight.com/forum/index.php?topic=1669.0 - especially the replies around 39 to 45
And then you want to read through this thread
http://pixinsight.com/forum/index.php?topic=1696.0 - especially around reply 11 (from Juan)
You have to understand that PI will be working on your data (internally) in a [0.0, 1.0] range - either as 32-bit floating-point data, or sometimes even as 64-bit floating-point data. Because the FITS format IS so 'Flexible' (hence its name!!), PI does NOT try to 'double-guess' what the original data acquisition program 'intended' to achieve when it created the FITS file that you are working with, it simply reads the format AS IT HAS BEEN STORED.
But, PI does give you the opportunity to 'make ammends' for crappy use of the FITS format in the first place (such as writing 16-bit unsigned integer data in a 32-bit floating point format).
I have just been able to take 30-odd each subs (Lights, Darks, Flats, FlatDarks of Lu data), all stored as 32-bit float, and perform a FULL CALIBRATION in PixInsight - ENTIRELY in PixInsight, and I can honestly say that I have NEVER seen such clean data before. EVER.
Yes, I had to jump through a couple of hoops to get the data into a format that PI was happier to be working with, but the hoops were quite large, not too high off the ground, and they weren't on fire and the landing was nice and soft on the other side.
Have a look at those two threads, think about your data acquisition process again (can it be modified, for example), and realise that you will (or should) still be able to recover any data stored in the 'wrong' (32-bit Float) format.
You will be bound to have further questions - that is what we are here for.
If I can find some time, I will (try to) make a video tutorial of the hoop-jumping procedure - but, right now, freshly laundered bed linen is beckoning . . . .

Cheers,