Finally: Smooth, working collision that I understand as well as I understand my rendering code.
Not sure of the name of this algorithm, but how it works is by calculating the start/end times of a collision in each axis (in frames, capped at 0-1); if those times overlap, it's a collision.
Hopefully, I can expand/replace the collision system a lot easier in the future if I ever outgrow this one.