O SQL Server armazena apenas o tempo em aproximadamente 1/300 de segundo. Estes sempre caem nos 0, 3 e 7 milissegundos. Por exemplo. contando a partir de 0 no menor incremento:
00:00:00.000
00:00:00.003
00:00:00.007
00:00:00.010
00:00:00.013
...
Se você precisa dessa precisão de milissegundos, não há maneira agradável de contornar isso. As melhores opções que vi são armazenar o valor em campos numéricos personalizados e reconstruí-lo toda vez que você buscar o valor ou armazená-lo como uma string de um formato conhecido. Você pode então (opcionalmente) armazenar uma data 'aproximada' no tipo de data nativo por uma questão de velocidade, mas introduz uma complexidade conceitual que muitas vezes não é desejada.