ActiveRecord не стремится гарантировать, что объекты в памяти для одних и тех же объектов базы данных будут одинаковыми. Это то, что DataMapper действительно гарантирует.
Я понимаю, что ваш пример, вероятно, упрощен для того, чтобы задать ваш вопрос, но просто из наивного взгляда на него - почему бы вам просто не использовать p вместо c.parent?
Еще одно, возможно, полезное предложение, сохраните обновление в parent в db:
p = Parent.find 41
# do this...
p.some_attr = 'some_value'
p.save
# OR this...
p.update_attribute(:some_attr, 'some_value')
c = p.children.build
c.parent
Я не уверен, что c.parent(false)
("не перезагружать из БД") справится с этой задачей, поскольку это свежий объект Child. Но вы можете попробовать это тоже.