how can I have a body with more than 64 Kb of data in it? I've noticed that when I create a node with too much data in the body field subsequent edits will not save. Or rather, the save goes ahead and I am taken back to viewing the node, but the content hasn't changed.

After extensive trial and error I was able to determine that any save which had a body length of less than 64 Kb saved fine but anything more than that would not save.

What is the cause of this and is there any way to get around it?
The reason of the problem is a regular expression that causes PCRE to reach the limit set for pcre.backtrack_limit or pcre.recursion_limit.
There was an issue report on drupal.org about truncated body content; the length of the text that is possible to enter before it gets truncated depends from the characters used (English text can be longer than a text containing all Unicode characters), and from the values set for pcre.backtrack_limit and pcre.recursion_limit.
The issue report I am speaking of is Document possible preg memory issues. Gerhard Killesreiter's comment is the following one:

This issue [the body content being truncated] is due to the limits of the perl regular expressions that we use to validate that you posted valid UTF8.
If you increase the limits in your settings.php file you will see the text.

ini_set('pcre.backtrack_limit', 200000);
ini_set('pcre.recursion_limit', 200000);


You will need to experiment which values work for you.

node_schema() defines the body field of the node_revisions table as &quot;big text&quot;. This means that with MySQL the maximum length of a node body is 4 GB, and with PostgreSQL there isn't (theoretically) any limit; in both the cases, the limit is not the 64KB you are observing.
The default.settings.php file contains the following comment:
/**
 * If you encounter a situation where users post a large amount of text, and
 * the result is stripped out upon viewing but can still be edited, Drupal's
 * output filter may not have sufficient memory to process it.  If you
 * experience this issue, you may wish to uncomment the following two lines
 * and increase the limits of these variables.  For more information, see
 * http://php.net/manual/en/pcre.configuration.php.
 */
# ini_set('pcre.backtrack_limit', 200000);
# ini_set('pcre.recursion_limit', 200000);