My best guess to why your booleans are giving you problems is most likely because you pick objects wrong, so you end up setting booleans for objects that shouldnt.
The benefit of using variables linked to objects, is that it helps make your project a lot easier to work with, as you know that variable linked to those objects wont interfere with anything else, and can only only trigger for those objects. Also they get reset to default values whenever a new object is created, so you dont have to think about if a global variable is at the correct setting for that object. But changing it, might screw up things for other objects. So quickly you will start to loose control. However if you dont like using them i guess there shouldnt be any problem in just using globals, if you can keep an track of them.
Regarding the size of the ghost. Your ghost was 19x19 and had a cell size of 40. Which means that your map (layout) is divide into 40x40 squares, and each of these will be checked for whether they are "clear" for objects moving through them. If a solid object like your walls are touching one of these cells, it will be flagged as "not clear" and object can move that way.
So if you have a map(layout) which is 100x100 pixel and make a cell size of 100, then you would only have 1 cell.If you then add a solid object with a size of 10x10 some where, it will mark the whole map as "not clear". as its covering that 1 cell.
But if you decrease the cell size to 1 you would suddenly have 10000 cells to check for being overlapped or not. If you then add your solid object, it would only cover 10x10 (100) pixel of the 10000 pixels. Making it possible for objects to move around the map.
However its not a good idea to set cell size to 1, its just for the example, as your computer would have to make way to many calculations when finding paths.
A good rule of thumb is to use the largest cell size that you can get away with.
You can read more about it in the manual: Path finding