*sigh* Sometimes I wonder how I can possibly be so dense...
Okay, I solved it. You were partially right. Here are the data files that I listed above on the server side, arranged from highest to lowest priority location:
Server:
~/tremtest/base/vm/game.qvm (TJW's latest game.qvm from tjw.org/tremulous)
~/tremtest/base/map-atcs-1.1.0.pk3
~/tremtest/base/data-1.1.0.pk3
But I was conspicuously missing an obvious server-side file. As it turns out, the correct arrangement should have been (in order of priority):
Server:
*** ~/.tremtest/base/vm/game.qvm (moved)
*** ~/tremtest/base/vms-1.1.0.pk3
~/tremtest/base/map-atcs-1.1.0.pk3
~/tremtest/base/data-1.1.0.pk3
This provides TJW's game.qvm to the server first in the search order; but when it can't find ui.qvm and cgame.qvm it falls back on the default vms-1.1.0 in the base directory.
I had left that file out because I thought that cgame.vm and ui.vm were not important for a server. But apparently, when you're running a PURE server, you still need those files so that it can check connecting clients against them. If vms-1.1.0.pk3 is missing, client connects will fail with the message I gave earlier.
If you're running a non-pure server, it doesn't do the check and you can safely remove vms-1.1.0.pk3 and rely only on game.qvm.
Ah, well. Now I know... Thanks, DASPRiD!
PS. I was running the server with the following script file:#!/bin/bash
./tremded.x86 +set dedicated 2 +set fs_homepath /home/foobar/.tremtest +exec server.cfg +set net_port 30000