> ... but that still doesn't appear to work
How, specifically, didn't it work?
Did you completely flush (delete) your browser cache before testing new code?
This should work fine:
ErrorDocument 400 /error.html
ErrorDocument 401 /error.html
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html
#
RewriteEngine on
#
RewriteRule ^productpage\.html$ http://www.example.co.uk/newproductpage.html [R=301,L]
RewriteRule ^productpage2\.html$ http://www.example.co.uk/newproductpage2.html [R=301,L]
#
RewriteCond %{HTTP_HOST} ^example\.co\.uk [NC]
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [R=301,L]
#
# - or better, if you have no subdomains other than "www" -
#
RewriteCond %{HTTP_HOST} !^(www\.example\.co\.uk)?$
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [R=301,L]
Note that the most-specific redirects are first to avoid multiple "chained" redirects on requests for your two obsolete URLs if the domain is also wrong.
If you use mod_rewrite for any functions, then use it for all, otherwise you cannot control the execution order of mod_alias versus mod_rewrite, and can have redirect-chaining problems as well as exposing internally-rewritten filepaths as URLs.
I do not recommend the use of a single error document for all errors: Each error document should be very specific, and be intended to inform and assist the visitor. 404 and 410 error pages should explain the problem and provide links to your home page, site search facility, and major category pages, as appropriate. All error documents (and especially the 403 error document) should have very few or zero external dependencies. That is, they should not reference or include any other images, stylesheets, external JavaScript files, etc. If you have such external dependencies, the chance for self-inflicted-denial-of-service increases.
Jim