Since rsync only changes what needs changing, it wouldn't hurt to simply have your cron job run once per hour. If there is little or nothing to copy over, it will take very little time. But you wouldn't want the job to hang trying, so you could create a small shell script to check if your MacBook is up and, if it is, then have it run the rsync command. Just in case there is a problem and the rsync job hangs or takes longer than an hour, you want to make sure you don't start a new instance when the previous one is still running. Here's a sample script (which I'll call MyRsyncJob and which you'll have to revise):
[ -s /var/run/MyRsyncJob ] && {
PID=$(cat /var/run/MyRsyncJob)
echo "MyRsyncJob is still running (PID $PID)" >&2
exit 1
}
ping -c 1 -o MacBook >&- || exit 1 # Exit if MacBook isn't reachable
trap 'rm /var/run/MyRsyncJob' 0 15 # Remove run file upon exit or TERM signal
echo $$ >> /var/run/MyRsyncJob # Put PID into run file
rsync -zave ssh /path/to/my/iphoto/library/ MacBook:/path/to/destination/directory
I hope that helps.