If requirement #1 can be relaxed (why do you care?) it becomes fairly easy to handle in a very gitorious way.
Let's imagine that you / the company you work for, have a git server (or a private github account with enough quota). Maybe if the git server was smart enough you could even ask it to to fork an existing project (chromium's src) like you do on github.
You could then fork the original chromium project (which might take a bit of time, but only the first time) and then, on every backup, push all the new objects introduce by your local branches.
In concrete words, this would become something like
Setup the backup
$ your-git-server-ctl create user/michaelpg/my-chrome-backup -fork chromium/chromium/src
# Wait for the server to clone repo, might take a while. You can check the replication status with git ls-remote git://user/michaelpg/my-chrome-backup
$ git remote add backup git://user/michaelpg/my-chrome-backup
$ git fetch backup # This should be very quick, as you already have the same objects in the 'origin' remote
Eventually, in lack of a git server, you could use a filesystem (e.g. another drive) as your backup repo, i.e.:
$ mkdir /mnt/boh/my-backup.git && git -C /mnt/boh/my-backup.git init --bare
$ git remote add backup /mnt/boh/my-backup.git
The only problem is that the first push (see below) will take a while because you will have to replicate all the chromium repo objects.
Backup all branches
$ git push --all --force backup # This will push all the new objects to the backup repo
Backup only one branch
$ git push --force backup local_branch_name
See the diff of a branch w.r.t the last backup
$ git diff branch1..remotes/backup/branch1 # (you can strip the remotes/ part on most modern git versions)
See the new commits on a branch since the last backup
$ git log remotes/backup/branch1..branch1
Restore the state of a branch from the backup
$ git reset --hard remotes/backup/branch1