And bump once more...
I've done a bit more digging. It looks as though it might be a fairly simple problem: the Steinberg SDK docs give this:
tresult PLUGIN_API getSignature (long index, long*
numerator, long*
denominator)
and in Kontakt3, I've managed to inspect what's being sent. It looks as though
numerator is being sent correctly (rows/beat,
rpb), but
denominator isn't - it's being sent as rows/measure (
rpm). I think that the correct way to do this would be to do the following:
1. Require that
rpm is an integral multiple of
rpb. This is, after all, only logical. This would have to be a flag, though, 'cos I'm sure there are people out there who haven't being following this convention.

2. Set
denominator as (
rpb/
rpm), and keep
numerator as
rpb.
Also, comments like
//Screw it! Let's just return the tempo at this point in time (might be a bit wrong). in the VST source code don't inspire confidence...

To save the devs some effort, I think that the problem is in
...
long CVstPluginManager::VstCallback(AEffect *effect, long opcode, long index, long value, void *ptr, float /*opt*/)
...
timeInfo.timeSigNumerator = pSndFile->m_nRowsPerBeat;
timeInfo.timeSigDenominator = pSndFile->m_nRowsPerMeasure;
...