optimize mysqldump for approx. 20GB databases for 8GB RAM
I'm not sure about serious improvement of total time, but below some recommendations:


I suggest You - convert all tables into InnoDB format, and adjust memory for InnoDB:

Innodb_buffer_pool_size = 4096M


To main reasons - optimisation for single engine more easy to tune and MyISAM not affected by --single-transaction


Split dump and GZIP


I do not know, what part of table You have in MyISAM, but it always better - finish all works with database as fast as possible, than continue other steps

GZIP is may be exactly slowest part of Your script and it really not optimised. It use single core not depending how many of them You have.