Well, what you are doing is partial check for intersection of objects with eachother, done at every frame. If objects do not intersect in specific frames, but collide somewhere half-way through, you need accurate collision detection algorithm that takes previons and current position and check if there was collision in middle. It is generally speaking more complicated than just check for intersection. Or you can try to avoid this happening, and force objects not to move too much. Though it will be problematic for small objects.
As anonymous poster have said, to find accurate collision in n dimensions you need to find intersection in n+1 dimensions. With rotating objects it becomes rather hard to do.
In 2D, it is relatively simple to avoid at least some problems:
instead of checking if vertices of one object are in the other object (and vice-versa), check for intersection of line segments between previous position of vertice and new position, with second object (and vice-versa). Use line segment-line segment intersection for it.
You need to choose frame of reference so second object doesn't move , i.e. use positions relatively to second object.
Most importantly, objects will not get stuck this way:
_____ | | _____|_____|_____| | | ||_____|_____|_____| | | |_____| where wide rectangle is one object and tall is other object.
Also, it will work for bullets and rockets aswell, you will not need to handle them specially.
Though, that will not work very well for fast spinning objects. If for example one object rotates 180 degrees during timeframe, lines corresponding to vertices will intersect in the centre, i.e. it will be able to get through small holes.
In 3D this is harder because of edge-edge checks, but not very much.
Gamasutra article addressing this issue.[Edited by - Dmytry on September 16, 2005 2:52:29 AM]