This is very strange, even if I comment all the loops in the function and
leave only the INSERT INTO command the insert still doesn't happen.
Add "RAISE ERROR" to the top function's BEGIN block and verify that the next time you run your calling query it indeed fails. I'm suspecting that the code you are iterating over is not the same code that is being executed (search_path dynamics probably).
That or you are looking in from another session without committing the first one.
David J.