In my ai system i used an other approach. After the level is loaded all cover point entities are detected and stored in an array. At runtime if taking cover is required, they are checked (player non visible and shortest distance to actor). Then pathfinding leads the actor to the cover point.
I would suggest to code this as a finite state machine, so you are able to react very differentiated. The gameplay looks much more realistic then.