There is a problem with the accepted solution if the process keeps the log file open; you basically need to reuse the i-node. Mmrobins' response is good, logrotate should do the right thing.
To use tail, you can do something (similar to Pantonza's & Greg's idea), but retain the original file by truncating the original file in-place:
tail -2000 logfile.txt >logfile.tmp
cat logfile.tmp > logfile.txt
rm logfile.tmp
To avoid a temp file, you could read into a variable, then stuff it back:
bash -c 'X=$(<tail -2000 logfile.txt);echo "$x">logfile.txt'
In all cases, there's the possibility of a race condition between your truncation and the process appending to the file. Not sure if logrotate handles that, none of the tail solutions here do.