Yesterday, I did a couple more experiments.
Installed Cubase 8.5.30 to check whether the problem is related to Cubase 9, but got exactly the same results.
Then I simply started with a new empty Cubase project and just added the Virus Control plugin. And sure enough, timing was as tight as it could be, with zero samples latency! So I figured it was somehow connected to the project I was working on. Hence, I created an empty project, imported all the tracks from the problematic project, added a new VC instance, loaded the VC preset from the other project and... latency was there again.
Then I started to delete groups of tracks (audio, instruments tracks with NI plugins) until there was only the MIDI tracks with VC present. Didn't change a thing, latency still there. But when deleted the VC plugin, added a new one, and just used the default Init presets, timing was spot on! Thus I knew it had to do with the Virus presets used in that project.
As I final step, I reloaded the VC preset from the problematic song, and started to replace the presets with Init presets. And as I removed the Input preset on Part 16 which used the Virus Inputs, the timing was back to sample accurate!
Bottom Line:
If a preset using the Virus Inputs is loaded in Virtual Control, it adds a latency of about 20ms (I measured 892 Samples several times) to all sounds coming back from the Virus Control plugin.
It's not clear whether that latency should or could be compensated by the Virus Control plugin or Cubase.