Here's another way to look at why some loops in RP2 are contractible and some aren't, without referring to quotient spaces. In particular, we can visualize (without rigorous proof) a closed loop that is not contractible, but whose "double" is contractible.
Instead of considering quotient spaces, we can think of RP2 as the collection of lines through the origin in R3. We can represent these as the lines connecting antipodal points in the unit sphere. So in this view a point in RP2 is a line in the unit sphere through the origin:

We have to shift perspective here - this line (in the sphere) is a point in RP2. And a line in RP2 is a fan-like "sequence" of lines (in the sphere), all of which are "touching". For example, drawing a line in RP2 could look something like this:

It starts out as a single point in RP2 which is a line in the unit sphere, and then extends out to form a line in RP2.
One type of (contractible) loop looks like a cone:

Note that this is a closed loop because the very first point (the red line) of the path (the cone) is the same as the very last point (the same red line at the very end of the cone) of the path. You can see the loop in the more "traditional" viewpoint as the circle at the top of the cone, where the cone touches the unit sphere. In the square-with-opposite-sides-identified viewpoint this would be the equivalent of a simple loop drawn within the body of the square (does not cross the boundary at all). You can tell it's contractible because, well, it's easy to contract it to a point - we simply shrink the loop - that is "narrow" the cone - until it becomes just a single line (which of course in RP2 is a point):

So that's all well and good. Now let's visualize a non-contractible loop. First let's start with a "half-circle" in RP2: a curved path whose ends do not touch. This looks like a half-cone:

Notice how the very first red line represents the start point of this path in RP2, whereas the very last dark green line represents the end point of the path. They are very much not the same line, which is why this is not a closed path (not a full cone). And if you look on the surface of the sphere you can see a half-circle like path which is again not a closed loop.
Next, consider what happens when we "flatten" this cone:

The two end points (the red and green lines at the edges of the cone) get closer and closer together until they finally touch (when we form a "flat cone"). Since they're touching, this is now a closed loop. In the squares-with-opposite-sides-identified viewpoint this would be a loop that crosses the boundary once.
If you spend some time imagining how to contract this loop (i.e. cone in the unit sphere) to a point (i.e. a line), you may just convince yourself that this cannot be done. In particular, note that if we try to "shrink the cone" like we did for the full loops (full cones) above then the path breaks - we get a half-cone again which is not a closed loop:

So by trying to shrink the cone/loop we broke the loop. It's interesting to try to imagine what happens if you tried to "raise" this flat cone's edges towards the top of the sphere starting at one point (any point), and then propagating this change outward in two opposite directions along the edges of the flat cone:

It works great until you reach two antipodal points on the edge of the flat cone (our starting point the red line and our ending point the green line) at which point the "rising wave" from one side wants to twist the line in one sense (move the point in one direction), whereas the "rising wave" from the other side wants to twist the same line in another sense (move the same point in a different direction), resulting in a "tear" (the red line and the green line are no longer touching). Ultimately this feels like a problem of orientability: we have two different paths from where the wave starts to the red/green lines, which are the same when the cone is flat. But propagating that wave along the two paths results in two different directions of "up", causing the tear.
It's instructive to see a similar construction that starts with a full-cone / closed-loop. Flattening it gives us a similar "flat-cone":

Note however that each line/point in this flat-cone/closed-loop is represented twice! You can see it for example in how the dark red line of the cone meets the dark-green line opposite it when the cone flattens out completely. In the squares-with-opposite-sides-identified viewpoint this would be a loop that crosses the boundary twice.
Now if we just do the exact same process backwards we can see that this path can be shrunk to a point just fine, by narrowing the cone into a line:

The path/cone does not break when we do this. Unlike the flattened half-cone, since every point is accounted for twice in the loop, we can push one "up" and one "down" without tearing, giving us the two opposing sides of the cone.
I like this viewpoint because no points are singled out as "special", unlike the quotient space formulation where it feels like the boundary plays some mysterious role. And we see the issue of orientability more directly (as the animation of the wave propagating in two directions shows). To address your idea that there must be a hole: it's more like that there's a global twist in the space, that causes certain loops to have their ends touching, but in a "twisted" way. You cannot shrink it because the twist is still there and will ultimately cause a tear. But if you wrap it around twice the double "twist" cancels itself out, and shrinking becomes possible.