After a prompt from Westi I added a note to Comments template standards on the Theme Development Codex page today.

The comments.php template file shouldn’t contain function defines unless in a function_exist() check. Ideally all functions should be in functions.php.

Example case: If comments.php contains function defines and the attachment.php loop assumes only one attachment to display and calls comment_template() each time round, you will get function redefines and fatal PHP errors for “cannot redeclare this function that was previously declared.”