For the 2nd test (after you got it up to 18 MB/s, which is higher than you'd be able to get if it were still in 100 Mbit mode), did you check if either side is CPU-bound? Rsync takes a decent amount of CPU, so that could be the bottleneck on gigabit networks.
You can also try adding the -W option, which will send the whole new file when a file's been changed, instead of the usual rsync diffs, which can be faster when bandwidth isn't the bottleneck.
You can also try adding the -W option, which will send the whole new file when a file's been changed, instead of the usual rsync diffs, which can be faster when bandwidth isn't the bottleneck.