As far as tracking the changing IP addresses, I use DynDNS
(http://www.dyndns.com/) for my home connection, along with an
intermediary service (from the OpenDNS people) to handle the update so
I can change both the dyndns record and my OpenDNS account's network
definition with one call.  I'm running DD-WRT on a router at home that
speaks to DNS-O-Matic (http://www.dnsomatic.com/) to perform the
updates.  I've found this setup to be acceptably reliable for how
often my IP changes - worst case scenario is a 30 minute wait, due to
how often DynDNS allows updates with a free account.  I believe you
can update more often for a small monthly fee.

I have also used your other option when I needed to avoid that
30-minute possibility at all costs (school or work presentations).
For that, my command looks like this:

wget -q -O - checkip.dyndns.org | sed -e 's/.*Current IP Address: //'
-e 's/<.*$//' | ssh <remote_server> 'cat > ~/homeip'

I just throw that in my crontab and have an account set up to use
key-based SSH auth for it.  If you were running BIND on a server it
would be trivial to adapt that to do a real DNS record update.

Regarding the actual sync mechanism, I think rsync over ssh is actual
the way to go - it may not be the prettiest utility, but it will do
the job well.  You'll probably want to enable compression on the
transfer.  Depending on exactly what you're doing with these servers
you could also look at some of the wrappers around rsync like
rdiff-backup.

If you wanted to stick with something more like Microsoft's DFS, you
could look at the Andrew File System
(http://en.wikipedia.org/wiki/Andrew_File_System) and Lustre
(http://en.wikipedia.org/wiki/Lustre_%28file_system%29).

Depending on your use case, you might also be interested in a tool
called incron, which lets you kick off tasks when files under a
particular path change.

Mostly which option you go with depends on how big of an operation
you're running off these two locations.  Odds are rsync will be
sufficient, but if you have thousands of client nodes at each end
making multiple updates per second, obviously that's a bit different.

 - Tony Yarusso