Unfortunately, the regtest network is currently essentially unusable in the intended way once you've generated enough blocks to reach the first retarget interval.
If this is really a problem, we can just change nTargetTimespan or nTargetSpacing for regtest.
The CPU miner in core mines in 2 steps. It scans until it finds a block with the top 8 bits equal to zero (ScanHash) and then does a more complex check.
It doesn't use CheckProofOfWork directly though. If it did, then the internal miner could be used, since the mask would be taken into account. This should probably be changed.
See
https://github.com/bitcoin/bitcoin/pull/4793