Решение было в методе слияния. Оказалось, что
a = b.merge(a)
и
a.merge(b) {|key, v1, v2| v1 }
делают разные вещи и в первом случае (что было неправильно) где-то появляется ноль. Я еще не выяснил, почему это так, потому что метод слияния всегда возвращает хэш, и когда я заменял первый вариант вторым, все было в порядке. Так что я не вижу никаких проблем ...