I think you've got your answer of what does the p lowest-order bits of k means from this answer but answer to the question why m should not be a power of 2 lies behind the concept of
Choosing a good hash function is of the utmost importance. An uniform hash function is one that equally distributes data items over the whole hash table data structure. If the hash function is poorly chosen data items may tend to clump in one area of the hash table and many collisions will ensue. A non-uniform dispersal pattern and a high collision rate cause an overall data structure performance degradation.
When using division method if you are sure that the keys that are going to be used for a particular database have "All the low-order p bit patterns are equally likely" then choosing m equal to a power of 2 is not bad; in fact, it is same as choosing some other value of m which is not a power of 2.
But there maybe cases when keys are distributed in such a way that a large number of different keys have same low-order p bit patterns, then choosing m equal to a power of 2 will fail to provide uniform distribution.
The idea is that, hash function chosen should not be biased to some specific pattern(s) so that it can ensure equal distribution of data items over the whole hash table (without the knowledge of if keys are biased to a specific pattern) fairly in all the possible cases.
"When using the division method, we usually avoid certain values of m (table size). For example, m should not be a power of 2, since if m = 2^p , then h(k) is just the p lowest-order bits of k. Unless it is known that all low-order p bit patterns are equally likely, it is better to make the hash function depend on all the bits of the key."
For detailed explanation of hashing using division method check this answer.