Como tu mismo has dicho los objetos que pasas por un Intent deben ser Parcelables o Serializables (si puedes hacerlo Parcelable mucho mejor, el sistema manipula los Parcelables mucho más rápido y te dará menos problemas si el objeto es muy grande). Esto quiere decir que no pasa el objeto referencia de la Activity anterior, de hecho incluso ese objeto se puede destruir si la Activity anterior decide destruirse (cosa que puede ocurrir aunque no es muy habitual salvo que la siguiente Activity necesite un huevo de memoria), sino que pasa una COPIA de ese objeto, es decir, una referencia distinta.
La solución consiste en devolver el objeto en un setResult (dentro de otro Intent) y recogerlo en el onActivityResult de la Activity anterior, puedes pasar sólo el objeto creado y añadirlo a tu ArrayList o pasar el ArrayList entero, eso ya como prefieras (yo haría lo primero)