Hi Martijn,
I'm sorry to hear that you are having a hard time working with DICOM files in the Wolfram Language. As you correctly noticed, Import["f.dcm", "Image"] applies a number of transformations under the hood. We went for this design because otherwise a vast majority of DICOM files would return an all-black image by default, which wouldn't be very useful.
I admit that our documentation for DICOM could be improved to be more helpful for advanced users. The element you are looking for is called "RawPixelData" and for now remains undocumented.
In[41]:= rawData = Import["ExampleData/head.dcm.gz", "RawPixelData"]
Out[41]= NumericArray[Type: UnsignedInteger16 Dimensions: {512, 512}]
In[42]:= MinMax[Normal @ rawData]
Out[42]= {0, 1727}
It returns an array of 16-bit unsigned integers even when the actual bit depth of the values in the file is 12, but the values are not modified in any way.
When you Import the "Data" element, on the other hand, you get the fully processed data which corresponds to the pixel values of the "Image" element:

Now, with "DataTransformation" -> None you can import pixel data without any scaling or other transformations defined in the DICOM file, but it will still map the theoretical range of pixel values to the range of the NumericArray type. For instance, a 12-bit DICOM data will be returned in a NumericArray of type "UnsignedInteger16" (because we don't have a 12-bit wide in the system) and every value will be multiplied by 16 (which maps [0, 2^12) to [0, 2^16)):
In[78]:= dataNoTransform = Import["ExampleData/head.dcm.gz", "Data", "DataTransformation" -> None]
Out[78]= NumericArray[Type: UnsignedInteger16 Dimensions: {512, 512}]
In[79]:= MinMax[Normal @ dataNoTransform]
Out[79]= {0, 27632}
In[80]:= MinMax[Normal @ rawData]
Out[80]= {0, 1727}
In[81]:= Max[dataNoTransform] / Max[rawData]
Out[81]= 16
One last tip: every standard DICOM tag can be imported via the "MetaInformation" element, including pixel data:
In[85]:= pixData = First @ Import["ExampleData/head.dcm.gz", {"MetaInformation", "PixelData"}]
Out[85]= NumericArray[Type: UnsignedInteger16 Dimensions: {512, 512}]
In[86]:= pixData === rawData
Out[86]= True