At a guess, the MTA is either removing the errant CR or converting it to CRLF after signing, causing the signature to fail. Bare CRs are illegal input (see RFC5322, Section 3.2).
There are features of libopendkim that attempt to deal with input like this by "fixing" the signed body. You could try signing with "FixCRLF" set and see if that works.
From: opendkim-users-bounce_at_lists.opendkim.org [mailto:opendkim-users-bounce_at_lists.opendkim.org] On Behalf Of vfx9as
Sent: Friday, November 19, 2010 8:14 AM
To: opendkim-users_at_lists.opendkim.org
Subject: CR CR LF-mail body as there is an error
Hi.
CR CR LF by failed: body hash mismatch
CR CR LF-mail body as there is an error
--- bugdata
From:bug_at_example.com<mailto:From%3Abug_at_example.com>
aa
aa ^M
aa
---
hexdump
0000000 F r o m : b u g _at_ e x a m p l e
0000010 . c o m \n \n a a \n a a \r \n a a
0000020 \n \n
0000022
$ cat bugdata | sendmail test_at_example.com<mailto:test_at_example.com>
failed: body hash mismatch
$ opendkim -V
opendkim: OpenDKIM Filter v2.2.1
Compiled with OpenSSL 0.9.8n 24 Mar 2010
SMFI_VERSION 0x1000001
libmilter version 1.0.1
Supported signing algorithms:
rsa-sha1
rsa-sha256
Supported canonicalization algorithms:
relaxed
simple
Active code options:
USE_ARLIB
libopendkim 2.2.1:
Received on Sat Nov 20 2010 - 03:38:17 PST