From a useful comment by Harry over at Peter Bowyer’s weblog.
cvs2cl is Perl script that does what you think it does: it produces a GNU-style ChangeLog for CVS-controlled sources, by running “cvs log” and parsing the output. Duplicate log messages get unified in the Right Way.
Get the script here.