The KF estimates the robot pose based on all sensor inputs and the sensor correlation. If you do an EKF on the compass data, you'd really need the robot pose to determine how likely a given compass reading is. Without that, you are
just low-pass filtering (not using a probabilistic filter like the KF).
If you filter before you put everything in the same frame, then I don't know what information you'd have to do filtering on.
Since I don't know exactly what you mean by "usable" I assume you have converted all sensor data into the coordinate frame of the robot. In that case, filtering is very easy since you can put all the sensor readings directly into one EKF. In fact, this is the "normal" way to do filtering, that I'm familiar with.
Let's say your IMU is attached to a robot. The IMU will be used in estimating the pose of the robot. It doesn't matter what units you use as long as the IMU is telling you something about how the robot is moving. Then you can use the corellation of the IMU to other things that measure movement, such as the compass or odometers. That is what the KF is for. The KF is not a sensor filter like a bandpass filter or something.
There is a very relevant answer here.