I looked at a friends bejeweled clone and it looks like he used Drag and Drop to allow the player to move the piece. On drag start it Z-Layered to the top. When the tile got 60 pixels Distance() from the temporarily saved source location he forced it to drop. It then would snap to the closest tile grid, and moved an invisible sprite to that location. Then he picked each stacked sprite instance under that invisible sprite, and further picked the bottom (z-layer) one to move to that original temporarily saved source location.
Yes I did ask him to clarify some things so I could post it. but he doesn't want to share code. sorry.
[edit- the 60 pixels was far enough to land on a tile next to the original, but not far enough to snap to a diagonal.]