How to select even/odd keyframes with python?
The following script is a bit rough, but it should do what you're looking for. It creates two new operators that work in the Dope Sheet, one for selecting even keys and one for selecting odd ones. It uses islice() from Python's itertools module... someone more well-versed in Python might have a different/better method to iterate through the keys.

It uses extended indexing syntax ("slice notation") on a dictionary view object of the keyframe_points property collection (*phew*).

Fair warning: this actually iterates through all of the actions in your .blend file. It shouldn't be too difficult to limit it to the actions in your scene or the actions of the selected object, but this should be enough to get you started.

To use the script, copy it into Blender's Text Editor and press Alt+P (with your mouse in the Text Editor). Then, from the Dope Sheet, you should be able to find the operators using Spacebar search.

import bpy

def main(context, even_odd='ODD'):
    for action in bpy.data.actions:
        for channel in action.fcurves:
            if channel.select == True:
                #First deselect all keys in the channel
                for key in channel.keyframe_points:
                    key.select_control_point = False
                    key.select_left_handle = False
                    key.select_right_handle = False
                if even_odd == 'ODD':
                    #Select only odd keys
                    for key in channel.keyframe_points.values()[1::2]:
                        key.select_control_point = True
                else:
                    #Select only even keys
                    for key in channel.keyframe_points.values()[::2]:
                        key.select_control_point = True


class ChannelSelectEvenKey(bpy.types.Operator):
    '''Select even keys for selected channels in the dopesheet'''
    bl_idname = "anim.channel_select_even"
    bl_label = "Select even keys"
    bl_description = "Select even keys for selected channels in the dopesheet"

    @classmethod
    def poll(cls, context):
        return context.area.type == 'DOPESHEET_EDITOR'

    def execute(self, context):
        main(context, 'EVEN')
        return {'FINISHED'}


class ChannelSelectOddKey(bpy.types.Operator):
    '''Select odd keys for selected channels in the dopesheet'''
    bl_idname = "anim.channel_select_odd"
    bl_label = "Select odd keys"
    bl_description = "Select odd keys for selected channels in the dopesheet"

    @classmethod
    def poll(cls, context):
        return context.area.type == 'DOPESHEET_EDITOR'

    def execute(self, context):
        main(context, 'ODD')
        return {'FINISHED'}


def register():
    bpy.utils.register_class(ChannelSelectEvenKey)
    bpy.utils.register_class(ChannelSelectOddKey)


def unregister():
    bpy.utils.unregister_class(ChannelSelectEvenKey)
    bpy.utils.register_class(ChannelSelectOddKey)


if __name__ == "__main__":
    register()