Once per frame should be enough.
In the gif it looks like the spike-hitbox is smaller than the tiles. Did you try to increase its size?
Make the spikebox the same size as the tiles your level is build with and see if this helps.
Maybe the speeds/velocities might be to big. (solution: more and smaller updates)
Or some unhandled corner cases in the collision function might be the problem.
Try to get some values for when the function produces an error / generally use the debugger to find out what exactly is wrong...