From @James Kanze's test it seems that it is a peculiarity of VC++'s C runtime (though I am certain other libraries suffer in the same way). This library also suffers from having a minimum allowable RAND_MAX, but that's another issue.
The solution to the low variance of the initial value is simply to discard it:
void seed_rand( unsigned int seed )
{
srand( seed ) ;
(void)rand() ;
}
int main()
{
seed_rand( time( NULL ) );
int r1 = rand();
std::cout << r1 << ' ' << rand() << std::endl;
return 0;
}