Oh okay,
so basically, you are not rendering at 64 by 64 since if I scale it back down at a real 64x64 pixel resolution and scale it back up I get a different result. It's particularly obvious when looking at moving things, you can see that instead of being rendered on a 64x64 grid, things can actually use the full high rez of the screen.
I don't know what you mean by "my drawing canvas’ width and height are 64px" maybe they are only logical pixels and it's not actually rendered on a 64x64 canvas.
The best way to have a 64 by 64 game is to actually draw on an actual 64 by 64 texture/canvas/display and to upscale that with no special upscaling filter, I tried to do this on a recording it should look like that (without the compression artifacts from the video recording of course):
Another way is to actually make sure that all sprites are just the right size and at just the right position by rounding the positions before rendering for instance, this solution is pointlessly more CPU intensive and not recommended, but sometimes depending on the technology you use, you might not have the choice.
I saw you were using love2D, I'm sure someone already tackled this issue and made a starter kit for lowrezjam or something.
I'm not sure if it's working or not but I saw this one for instance: https://github.com/tcfunk/lowrezjam-starterkit-love2d and this video too