How do I back up AWS S3 and EBS to a non-Amazon provider?

This is not something I've implemented personally, but my strategy would be something like the following:

S3 buckets

Several other providers implement the S3 API, for example Dream Objects or Google Could Storage. I'd simply have a script which iterates over a bucket and puts the objects to another provider. To save bandwidth you could check the checksum.

EBS

I'd programatically clone an EBS snapshot, mount it to your instance running the backups, use dd or simmilar to create an image, compress it then upload it to S3. Then obviously include the image as part of your S3 backups.

RDS

Similar to EBS, but instead of cloning the disk I'd use the snapshot to launch a new instance then run mysqldump (or whatever the equivalent tool is for your RDBMS is) and upload the result to S3.

Alternatively, you could have an external slave to your RDS instance and keep that backed up externally.

You could bake these scripts into an AMI which runs them on startup then shuts down, simply start that instance however frequently you need your backups.