Penso che in effetti dipenda dall'implementazione, ma puoi avere un'idea delle differenze esaminando i sorgenti di MySQLdb. A seconda delle opzioni, mysqldb fetch* mantiene l'attuale set di righe in memoria o lato server, quindi fetchmany vs fetchone ha una certa flessibilità qui per sapere cosa conservare nella memoria (di Python) e cosa mantenere db lato server.
PEP 249 non fornisce molti dettagli, quindi suppongo che questo sia per ottimizzare le cose a seconda del database mentre la semantica esatta è definita dall'implementazione.