In my experience, the best way to handle positions in a tile-based world is to ignore that you're in a tile-based world. That is, keep your entities stored in world-positions, keep the path(s) which your entities will be travelling on stored in world-space, and if at all possible, don't let your entities or other game logic know about tiles at all.
The problem with considering tiles is that they introduce corner cases into your game code; lots of new places where your code can misbehave in subtle ways. Not only do (for example) towers need to be able to tell how close they are to entities on their own tile, but also to the entities on other tiles. And as soon as you're thinking about tiles, you start thinking about finding the neighbours of tiles, which is also easy to introduce bugs into (particularly along the edges and corners of the playfield).
Tile-based worlds are really convenient for level editing. But my advice is to only use the tile structure for editing; don't let the way the level is built spread into the game logic itself.