Since you said your game is free form (i.e. no predefined stacks) your problem basically turns into a collision detection one.
Basically your cards are going to have a position on the board and a size. From there you need to iterate over all the other cards on the board and determine what cards you're overlapping.
If you define your cards to be rectangles and don't allow rotation, the problem gets pretty easy.
Basically you would calculate the 4 corners of your card by offsetting from the card's position half the size of the card, and plugging those numbers in to this formula: https://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each-other/2696876#2696876. You can either decide to go for a naive solution (i.e. "do they overlap at all", or go for the area calculation to figure out which card is the "most" covered and use that one.
The problem gets a little more difficult if you can have cards stacking on top of each other. You'd basically have to do the same test but in order from top to bottom, where every time you put a card down you assume it's on a higher layer.