AT24C256 EEPROM write failed

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.