I think you can only optimize your existing method if the player's box doesn't rotate (or rotates only at multiples of 90 degrees).
In this case, I would do the following:
Let the corners of the player's box be A, B, C and D, and (Ax, Ay) the coordinates of A, etc. The letters go counter-clockwise, starting from the upper left corner.
Step 1: You can easily get the indexes of the tiles which contain each of these corners. Use integer division, and the (fixed) size of your tiles. Let these indexes be (Ai, Aj), (Bi, Bj) etc.
Step 2: The following tiles (indexes: (Ri, Rj)) will be completely inside the player's box:
(Ai+1, Aj+1) <= (Ri, Rj) <= (Ci-1, Cj-1)
Step 3: The following tiles will be partially intersecting with the player's box:
(Ri == Ai) && (Aj <= Rj <= Bj)
(Ri == Di) && (Dj <= Rj <= Cj)
(Rj == Aj) && (Ai <= Ri <= Di)
(Rj == Bj) && (Bi <= Ri <= Ci)
Implying that i is the horizontal index.