There shouldn't be enormous processor usage at all because you're calling al_flip_display(). So, there can only be one of two explanations:
1: You're not vsyncing. With a 2D application there's no excuse not to and this alone should dramatically cut down CPU usage. Before creating your display object, use al_set_new_display_option() to set ALLEGRO_VSYNC to 1. The default setting of 0 means to let the video drivers decide, and by default, video drivers tend to be set to NOT vsync.
2: Some video cards have optimizations in place to spread GPU rendering across CPU core usage in order to maximize performance. As you might expect though, this increases CPU usage, sometimes substantially. I don't know if ATI/AMD cards have an option related to this, but with an nVidia card, try disabling its "Threaded Optimization" setting.
As for calling al_rest() or Sleep(), keep in mind that ANY value higher than 0 could potentially give up as much as 50 ms of processing time, which would cut down CPU usage for sure but could also kill your game's performance. On the flip side, a value of 0 only gives up processing time to other threads of equal priority. This means if no such threads exist, no time is given up. It's meant as a method of playing nice with multitasking so you would put al_rest(0.0) or Sleep(0) typically at the end of your game loop. Mine is right after al_flip_display().