Pertaining to your questions #1 and #2... There may be differences in behavior depending on what OS the device is using. Many permissions were modified/renamed/created when OS 4.7 was released. For example, here are the permissions I request for OS 4.5:
ApplicationPermissions.PERMISSION_FILE_API
ApplicationPermissions.PERMISSION_INTER_PROCESS_COMMUNUCATION
ApplicationPermissions.PERMISSION_CHANGE_DEVICE_SETTINGS
ApplicationPermissions.PERMISSION_EXTERNAL_CONNECTIONS
ApplicationPermissions.PERMISSION_INTERNAL_CONNECTIONS
ApplicationPermissions.PERMISSION_WIFI
ApplicationPermissions.PERMISSION_EMAIL
ApplicationPermissions.PERMISSION_HANDHELD_KEYSTORE
And here are the permissions I request for OS 4.7:
ApplicationPermissions.PERMISSION_FILE_API
ApplicationPermissions.PERMISSION_CROSS_APPLICATION_COMMUNICATION
ApplicationPermissions.PERMISSION_DEVICE_SETTINGS
ApplicationPermissions.PERMISSION_INTERNET
ApplicationPermissions.PERMISSION_SERVER_NETWORK
ApplicationPermissions.PERMISSION_WIFI
ApplicationPermissions.PERMISSION_EMAIL
ApplicationPermissions.PERMISSION_SECURITY_DATA,
You can see that a number of permissions were renamed. You may need to update your code to be aware of the OS and request specific permissions.
For question #3, there is no way to execute any kind of code on-install. The best you can do is make your application 'Auto-run on startup' and perform the check then. However, this might be a worse solution, as the user may become confused by getting a permissions request dialog on startup.
The best solution is to make sure you have sufficient privileges every time your application is launched. If not, request all necessary privileges and handle everything as gracefully as possible. If you execute this successfully, your users will only have to deal with the permissions the very first time your application is launched (as long as they don't mess around with them on their own later on).