Let's break you problem into three pieces.
Python sending block of 16 bytes
Arduino reading blocks of 16 bytes
Arduino writing blocks of 16 bytes to an external eeprom
I am not at all familiar with Python and can not comment on that code at all.
There are some things in your Arduino code that don't look correct to me.
I strongly recommend that you look at this tutorial by Robin2 on techniques for receiving serial data.
http://forum.arduino.cc/index.php?topic=396450
I think that example 6 which is binary data with start and end markers is particularly relevant.
I am certain that if you can get a block of 16 bytes into a buffer on the Arduino, the code I posted will get it correctly into the eeprom without page issues. The only issue is managing the addresses and saving a last known address (perhaps in the onboard eeprom) if all the data is not transferred in one go and the Arduino loses power.