White Elephant Gift Exchange game using object-oriented design
Technical issues


In your WhiteElephant class, turnCompletedUsers is unused. Is this expected?
For the purposes of this site*, I think it'll be better if you can actually fill in the implementation for WhiteElephant.stealGift() and WhiteElephant.pickGift() (which happens to be unused, too).
You do not need to make all your methods in WhiteElephant public, probably only play() should remain public and the rest can be private.
openedGifts.add(gift) is actually a syntax error*, as openedGifts is a Map. Perhaps you were looking for openGifts.put(gift, currentUser)?
stealGift() returns a boolean value, but what does that indicate?


Gameplay


  The first person opens a wrapped gift and the turn ends.


Your implementation does not take care of the first player, where the turn ends immediately after opening a gift.

Gift gift = currUser.pickOrSteal(unopenedGifts, openedGifts.keySet());
if (isGiftAvailableForStealing(gift)) {
    ...
}


This two lines seem a bit weird, as I don't think the game rules makes a separate decision concerning whether a gift is available for stealing after a player picks/steals a gift.

An alternative approach

I'll leave this as an exercise for the reader, how about considering adding a new field inside Gift that represents the current holder of the item? In that case, the same isOpened() method will read something like:

public boolean isOpened() {
    return holder != null;
}


The other operations to complete the 'stealing' of gifts, i.e. swapping the players holding the gift, becomes slightly easier, I would think...



* In fact, we only review complete and working code, I am letting these slide because it's not too far a stretch to assume what might be the underlying implementation... but only just.