You can use the 8direction behavior to move the object but you can't use the solid behavior for the walls because the behavior will just stop when hitting a solid.
At this point we can detect collisions with the overlap condition. The part we want now is some kind of collision response to keep the object out of the walls and do other stuff like sliding.
The simplest collision response would be to save the object's position before moving and the if it overlaps a wall after moving then undo the move by moving back to the saved position. The drawback is this won't do any sliding and if moving fast the object will stop short of the wall.
Another method is to move the object a pixel or so at a time until it's not overlapping. All that's needed is a direction. If we use the opposite direction of the motion we'll get the object to stop at the edge of the wall, but not slide. If we instead find the closest direction to move out we can get sliding. We just need a good way to find the closest direction.
One idea to find the closest direction would be to save the object's position then try moving out in each of the four directions of the wall, and measure the distance moved for each. The closest direction would be the one with the shortest distance. You'll want to do this for each wall. With this you'll get wall sliding but you can get some jumping when hitting a corner which may be kind of like your third picture but not quite.
One thing to consider is so far all that's being done is correcting the position of the object, but we will also need to correct the velocity of the object. Sliding would basically be setting the velocity perpendicular to the side of wall (or normal) to zero. The normal is also the same as the closest direction that the object moved out.
Setting the velocity along a direction to zero can be done with some math.
Var vx= object.velocityX
Var vy= object.velocityY
Var dot= vx*cos(dir)+vy*sin(dir)
Set velocity to (vx-dot*cos(dir), vy-dot*sin(dir))
Dot is the velocity along a direction and we're subtracting it from the velocity.
You can avoid the position jumping by not moving out in the closest direction. Instead move out in the opposite direction, keeping track of how far we move out as this is the remaining distance to move. Then we need a way to find the normal of the collision. From that we can the correct the speed as with above and then try to move again with the new velocity, or basically just move in the same direction of the current edge with the remaining distance. This can be repeated as many times as nessisary but usually it's fine to do it once.
One way to do the normal detection is to use overlaps at offset to check the positions around the object
Var dx=0
Var dy=0
Overlaps at offset(1,0)
--- add 1 to dx
Overlaps at offset(1,1)
--- add 1 to dx
--- add 1 to dy
Overlaps at offset(0,1)
--- add 1 to dy
Overlaps at offset(-1,1)
--- add -1 to dx
--- add 1 to dy
...etc
Then the normal should equal angle(dx,dy,0,0)
This requires that the object is all the way pushed out first before finding the normal.
All this will cause a very high amount of collision checks and the object may jitter when repeatedly pushing out of walls due to pushing out a pixel at a time not being precise enough. Both can be solved by implimenting raycasting which can be used to find exact collision points and makes finding the normal simpler, that is once it's all setup which isn't really simple.
Of course I may be overthinking a lot of this, and even after getting wall sliding working a few times I think it could be made a lot simpler. Instead of handling everything with equations to handle all cases you probably could get by by coming up with a list of cases and handling them one by one. For instance the third case in your image to move around a corner. For example:
object is moving down
Wall is below
---wall not below to the left
------ move object left
---wall not below to the right
------- move object right
Just do that for all four directions. Still you'll still need some good collision response like above.
Anyway I hope some of the above is useful in some way.