I'm not too excited about take-home exams, precisely for the reasons mentioned by OP. I prefer to have a clear-cut difference between homework (show that you can do the computations, write down clean and documented proofs, ...) and exams (show that you understand the subject matter, are able to explain it and note relationships, say what is applicable to a given situation, ...). If the matter turns out just too long, what I have done is to split one (or even various) problems up. I.e., do step one starting from this; assume that at the beginning of an iteration you have ... and show the state at the end of the iteration; if the state is this one, is the iteration done (and what is the result). You don't want to check if they can do all the calculations in detail, you are interested in assessing their understanding.
Yes, time pressure is a problem. I schedule exams for saturdays (rooms are empty,it is easy to get enough so the "look a the neighbor's work" isn't too much of a problem, and it is also possible to reserve rooms for two lecture blocks in a row (to have leeway for getting everyone seated, exams handed out, any last minute instructions, possible stragglers, ...). This reduces time pressure. If the estimate of the time turns out too short, there is no risk of getting thrown out by the next class.