Ok, it sounds like what I'm calling "pseudo-isometric" - where the graphics are drawn from a frontal, but slightly "above" angle.
Ok so, you have your 8 directions ( 0 degrees, 45 degrees, 90 degrees, 135 degrees, 180 degrees, and so-on) - these are the angles you actually move at, but if you go half-way in between each of these angles to make a total of 16 angles ( 0 degrees, 22.5 degrees, 45 degrees, 67.5 degrees, 90 degrees, 112.5 degrees, 135, etc etc).
The idea is to use the 8 angles "in-between" your actual directions, AND the actual directions themselves, as a trigger for changing animations/frames. So, you rotate your sprite smoothly (360 degrees spinning, like car behaviour for example) and you use the angular measurement (range) to set the correct animation.
Imagine using smooth turning instead of 8-directinonal movement
If player.angle is between 337.5 and 22.5 (the character will be facing right within 45 degrees) -> set animation/frame to "right"
If player.angle is between 22.51 and 67.5 -> set animation/frame to "right/down"
If player angle is between 67.6 and 112.5 -> set animation/frame to "down"
This should give you the freedom to rotate your sprite smoothly, and it will change animation frames/angles that match your artwork.
I'm doing something very similar to this myself actually using 8 directional movement, but I'm rotating my player around only 6 directions from a display point of view. I translated what angles I wanted to display the direction I am moving in graphically, so my "left" is the same as my "diagonally left/down" and "right" is the same as "diagonally right/down". It's kinda hard to explain, but hopefully you got something from that. I can maybe make an example or share some prototype I'm working on if you get stuck still. Cheers!